diff options
Diffstat (limited to 'sound/oss/uart401.c')
| -rw-r--r-- | sound/oss/uart401.c | 22 | 
1 files changed, 9 insertions, 13 deletions
diff --git a/sound/oss/uart401.c b/sound/oss/uart401.c index 8e514a676a0..62b8869f5a4 100644 --- a/sound/oss/uart401.c +++ b/sound/oss/uart401.c @@ -274,19 +274,12 @@ static int reset_uart401(uart401_devc * devc)  		}  	} - +	/* Flush input before enabling interrupts */  	if (ok) -	{ -		DEB(printk("Reset UART401 OK\n")); -	} +		uart401_input_loop(devc);  	else  		DDB(printk("Reset UART401 failed - No hardware detected.\n")); -	if (ok) -		uart401_input_loop(devc);	/* -						 * Flush input before enabling interrupts -						 */ -  	return ok;  } @@ -352,23 +345,26 @@ int probe_uart401(struct address_info *hw_config, struct module *owner)  		goto cleanup_irq;  	}  	conf_printf(name, hw_config); -	midi_devs[devc->my_dev] = kmalloc(sizeof(struct midi_operations), GFP_KERNEL); +	midi_devs[devc->my_dev] = kmemdup(&uart401_operations, +					  sizeof(struct midi_operations), +					  GFP_KERNEL);  	if (!midi_devs[devc->my_dev]) {  		printk(KERN_ERR "uart401: Failed to allocate memory\n");  		goto cleanup_unload_mididev;  	} -	memcpy(midi_devs[devc->my_dev], &uart401_operations, sizeof(struct midi_operations));  	if (owner)  		midi_devs[devc->my_dev]->owner = owner;  	midi_devs[devc->my_dev]->devc = devc; -	midi_devs[devc->my_dev]->converter = kmalloc(sizeof(struct synth_operations), GFP_KERNEL); +	midi_devs[devc->my_dev]->converter = kmemdup(&std_midi_synth, +						     sizeof(struct synth_operations), +						     GFP_KERNEL); +  	if (!midi_devs[devc->my_dev]->converter) {  		printk(KERN_WARNING "uart401: Failed to allocate memory\n");  		goto cleanup_midi_devs;  	} -	memcpy(midi_devs[devc->my_dev]->converter, &std_midi_synth, sizeof(struct synth_operations));  	strcpy(midi_devs[devc->my_dev]->info.name, name);  	midi_devs[devc->my_dev]->converter->id = "UART401";  	midi_devs[devc->my_dev]->converter->midi_dev = devc->my_dev;  | 
