diff options
Diffstat (limited to 'sound/drivers')
-rw-r--r-- | sound/drivers/dummy.c | 14 | ||||
-rw-r--r-- | sound/drivers/mpu401/mpu401.c | 16 | ||||
-rw-r--r-- | sound/drivers/mpu401/mpu401_uart.c | 42 | ||||
-rw-r--r-- | sound/drivers/serial-u16550.c | 14 | ||||
-rw-r--r-- | sound/drivers/virmidi.c | 14 |
5 files changed, 50 insertions, 50 deletions
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c index e35fd5779a9d..ae0df549fac7 100644 --- a/sound/drivers/dummy.c +++ b/sound/drivers/dummy.c | |||
@@ -675,10 +675,8 @@ static int __init alsa_card_dummy_init(void) | |||
675 | continue; | 675 | continue; |
676 | device = platform_device_register_simple(SND_DUMMY_DRIVER, | 676 | device = platform_device_register_simple(SND_DUMMY_DRIVER, |
677 | i, NULL, 0); | 677 | i, NULL, 0); |
678 | if (IS_ERR(device)) { | 678 | if (IS_ERR(device)) |
679 | err = PTR_ERR(device); | 679 | continue; |
680 | goto errout; | ||
681 | } | ||
682 | devices[i] = device; | 680 | devices[i] = device; |
683 | cards++; | 681 | cards++; |
684 | } | 682 | } |
@@ -686,14 +684,10 @@ static int __init alsa_card_dummy_init(void) | |||
686 | #ifdef MODULE | 684 | #ifdef MODULE |
687 | printk(KERN_ERR "Dummy soundcard not found or device busy\n"); | 685 | printk(KERN_ERR "Dummy soundcard not found or device busy\n"); |
688 | #endif | 686 | #endif |
689 | err = -ENODEV; | 687 | snd_dummy_unregister_all(); |
690 | goto errout; | 688 | return -ENODEV; |
691 | } | 689 | } |
692 | return 0; | 690 | return 0; |
693 | |||
694 | errout: | ||
695 | snd_dummy_unregister_all(); | ||
696 | return err; | ||
697 | } | 691 | } |
698 | 692 | ||
699 | static void __exit alsa_card_dummy_exit(void) | 693 | static void __exit alsa_card_dummy_exit(void) |
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c index 9ea3059a7064..77b06009735d 100644 --- a/sound/drivers/mpu401/mpu401.c +++ b/sound/drivers/mpu401/mpu401.c | |||
@@ -151,7 +151,7 @@ static struct pnp_device_id snd_mpu401_pnpids[] = { | |||
151 | 151 | ||
152 | MODULE_DEVICE_TABLE(pnp, snd_mpu401_pnpids); | 152 | MODULE_DEVICE_TABLE(pnp, snd_mpu401_pnpids); |
153 | 153 | ||
154 | static int __init snd_mpu401_pnp(int dev, struct pnp_dev *device, | 154 | static int __devinit snd_mpu401_pnp(int dev, struct pnp_dev *device, |
155 | const struct pnp_device_id *id) | 155 | const struct pnp_device_id *id) |
156 | { | 156 | { |
157 | if (!pnp_port_valid(device, 0) || | 157 | if (!pnp_port_valid(device, 0) || |
@@ -251,10 +251,8 @@ static int __init alsa_card_mpu401_init(void) | |||
251 | #endif | 251 | #endif |
252 | device = platform_device_register_simple(SND_MPU401_DRIVER, | 252 | device = platform_device_register_simple(SND_MPU401_DRIVER, |
253 | i, NULL, 0); | 253 | i, NULL, 0); |
254 | if (IS_ERR(device)) { | 254 | if (IS_ERR(device)) |
255 | err = PTR_ERR(device); | 255 | continue; |
256 | goto errout; | ||
257 | } | ||
258 | platform_devices[i] = device; | 256 | platform_devices[i] = device; |
259 | snd_mpu401_devices++; | 257 | snd_mpu401_devices++; |
260 | } | 258 | } |
@@ -266,14 +264,10 @@ static int __init alsa_card_mpu401_init(void) | |||
266 | #ifdef MODULE | 264 | #ifdef MODULE |
267 | printk(KERN_ERR "MPU-401 device not found or device busy\n"); | 265 | printk(KERN_ERR "MPU-401 device not found or device busy\n"); |
268 | #endif | 266 | #endif |
269 | err = -ENODEV; | 267 | snd_mpu401_unregister_all(); |
270 | goto errout; | 268 | return -ENODEV; |
271 | } | 269 | } |
272 | return 0; | 270 | return 0; |
273 | |||
274 | errout: | ||
275 | snd_mpu401_unregister_all(); | ||
276 | return err; | ||
277 | } | 271 | } |
278 | 272 | ||
279 | static void __exit alsa_card_mpu401_exit(void) | 273 | static void __exit alsa_card_mpu401_exit(void) |
diff --git a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c index 8687ae3c66b8..b49a45cbf67a 100644 --- a/sound/drivers/mpu401/mpu401_uart.c +++ b/sound/drivers/mpu401/mpu401_uart.c | |||
@@ -183,7 +183,8 @@ static void snd_mpu401_uart_remove_timer (struct snd_mpu401 *mpu, int input) | |||
183 | 183 | ||
184 | */ | 184 | */ |
185 | 185 | ||
186 | static void snd_mpu401_uart_cmd(struct snd_mpu401 * mpu, unsigned char cmd, int ack) | 186 | static int snd_mpu401_uart_cmd(struct snd_mpu401 * mpu, unsigned char cmd, |
187 | int ack) | ||
187 | { | 188 | { |
188 | unsigned long flags; | 189 | unsigned long flags; |
189 | int timeout, ok; | 190 | int timeout, ok; |
@@ -218,9 +219,11 @@ static void snd_mpu401_uart_cmd(struct snd_mpu401 * mpu, unsigned char cmd, int | |||
218 | ok = 1; | 219 | ok = 1; |
219 | } | 220 | } |
220 | spin_unlock_irqrestore(&mpu->input_lock, flags); | 221 | spin_unlock_irqrestore(&mpu->input_lock, flags); |
221 | if (! ok) | 222 | if (!ok) { |
222 | snd_printk("cmd: 0x%x failed at 0x%lx (status = 0x%x, data = 0x%x)\n", cmd, mpu->port, mpu->read(mpu, MPU401C(mpu)), mpu->read(mpu, MPU401D(mpu))); | 223 | snd_printk("cmd: 0x%x failed at 0x%lx (status = 0x%x, data = 0x%x)\n", cmd, mpu->port, mpu->read(mpu, MPU401C(mpu)), mpu->read(mpu, MPU401D(mpu))); |
223 | // snd_printk("cmd: 0x%x at 0x%lx (status = 0x%x, data = 0x%x)\n", cmd, mpu->port, mpu->read(mpu, MPU401C(mpu)), mpu->read(mpu, MPU401D(mpu))); | 224 | return 1; |
225 | } | ||
226 | return 0; | ||
224 | } | 227 | } |
225 | 228 | ||
226 | /* | 229 | /* |
@@ -235,12 +238,19 @@ static int snd_mpu401_uart_input_open(struct snd_rawmidi_substream *substream) | |||
235 | if (mpu->open_input && (err = mpu->open_input(mpu)) < 0) | 238 | if (mpu->open_input && (err = mpu->open_input(mpu)) < 0) |
236 | return err; | 239 | return err; |
237 | if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode)) { | 240 | if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode)) { |
238 | snd_mpu401_uart_cmd(mpu, MPU401_RESET, 1); | 241 | if (snd_mpu401_uart_cmd(mpu, MPU401_RESET, 1)) |
239 | snd_mpu401_uart_cmd(mpu, MPU401_ENTER_UART, 1); | 242 | goto error_out; |
243 | if (snd_mpu401_uart_cmd(mpu, MPU401_ENTER_UART, 1)) | ||
244 | goto error_out; | ||
240 | } | 245 | } |
241 | mpu->substream_input = substream; | 246 | mpu->substream_input = substream; |
242 | set_bit(MPU401_MODE_BIT_INPUT, &mpu->mode); | 247 | set_bit(MPU401_MODE_BIT_INPUT, &mpu->mode); |
243 | return 0; | 248 | return 0; |
249 | |||
250 | error_out: | ||
251 | if (mpu->open_input && mpu->close_input) | ||
252 | mpu->close_input(mpu); | ||
253 | return -EIO; | ||
244 | } | 254 | } |
245 | 255 | ||
246 | static int snd_mpu401_uart_output_open(struct snd_rawmidi_substream *substream) | 256 | static int snd_mpu401_uart_output_open(struct snd_rawmidi_substream *substream) |
@@ -252,39 +262,52 @@ static int snd_mpu401_uart_output_open(struct snd_rawmidi_substream *substream) | |||
252 | if (mpu->open_output && (err = mpu->open_output(mpu)) < 0) | 262 | if (mpu->open_output && (err = mpu->open_output(mpu)) < 0) |
253 | return err; | 263 | return err; |
254 | if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) { | 264 | if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) { |
255 | snd_mpu401_uart_cmd(mpu, MPU401_RESET, 1); | 265 | if (snd_mpu401_uart_cmd(mpu, MPU401_RESET, 1)) |
256 | snd_mpu401_uart_cmd(mpu, MPU401_ENTER_UART, 1); | 266 | goto error_out; |
267 | if (snd_mpu401_uart_cmd(mpu, MPU401_ENTER_UART, 1)) | ||
268 | goto error_out; | ||
257 | } | 269 | } |
258 | mpu->substream_output = substream; | 270 | mpu->substream_output = substream; |
259 | set_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode); | 271 | set_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode); |
260 | return 0; | 272 | return 0; |
273 | |||
274 | error_out: | ||
275 | if (mpu->open_output && mpu->close_output) | ||
276 | mpu->close_output(mpu); | ||
277 | return -EIO; | ||
261 | } | 278 | } |
262 | 279 | ||
263 | static int snd_mpu401_uart_input_close(struct snd_rawmidi_substream *substream) | 280 | static int snd_mpu401_uart_input_close(struct snd_rawmidi_substream *substream) |
264 | { | 281 | { |
265 | struct snd_mpu401 *mpu; | 282 | struct snd_mpu401 *mpu; |
283 | int err = 0; | ||
266 | 284 | ||
267 | mpu = substream->rmidi->private_data; | 285 | mpu = substream->rmidi->private_data; |
268 | clear_bit(MPU401_MODE_BIT_INPUT, &mpu->mode); | 286 | clear_bit(MPU401_MODE_BIT_INPUT, &mpu->mode); |
269 | mpu->substream_input = NULL; | 287 | mpu->substream_input = NULL; |
270 | if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode)) | 288 | if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode)) |
271 | snd_mpu401_uart_cmd(mpu, MPU401_RESET, 0); | 289 | err = snd_mpu401_uart_cmd(mpu, MPU401_RESET, 0); |
272 | if (mpu->close_input) | 290 | if (mpu->close_input) |
273 | mpu->close_input(mpu); | 291 | mpu->close_input(mpu); |
292 | if (err) | ||
293 | return -EIO; | ||
274 | return 0; | 294 | return 0; |
275 | } | 295 | } |
276 | 296 | ||
277 | static int snd_mpu401_uart_output_close(struct snd_rawmidi_substream *substream) | 297 | static int snd_mpu401_uart_output_close(struct snd_rawmidi_substream *substream) |
278 | { | 298 | { |
279 | struct snd_mpu401 *mpu; | 299 | struct snd_mpu401 *mpu; |
300 | int err = 0; | ||
280 | 301 | ||
281 | mpu = substream->rmidi->private_data; | 302 | mpu = substream->rmidi->private_data; |
282 | clear_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode); | 303 | clear_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode); |
283 | mpu->substream_output = NULL; | 304 | mpu->substream_output = NULL; |
284 | if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) | 305 | if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) |
285 | snd_mpu401_uart_cmd(mpu, MPU401_RESET, 0); | 306 | err = snd_mpu401_uart_cmd(mpu, MPU401_RESET, 0); |
286 | if (mpu->close_output) | 307 | if (mpu->close_output) |
287 | mpu->close_output(mpu); | 308 | mpu->close_output(mpu); |
309 | if (err) | ||
310 | return -EIO; | ||
288 | return 0; | 311 | return 0; |
289 | } | 312 | } |
290 | 313 | ||
@@ -316,6 +339,7 @@ static void snd_mpu401_uart_input_trigger(struct snd_rawmidi_substream *substrea | |||
316 | snd_mpu401_uart_remove_timer(mpu, 1); | 339 | snd_mpu401_uart_remove_timer(mpu, 1); |
317 | clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode); | 340 | clear_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode); |
318 | } | 341 | } |
342 | |||
319 | } | 343 | } |
320 | 344 | ||
321 | /* | 345 | /* |
diff --git a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c index 1a7fbefe4740..c01b4c5118b9 100644 --- a/sound/drivers/serial-u16550.c +++ b/sound/drivers/serial-u16550.c | |||
@@ -996,10 +996,8 @@ static int __init alsa_card_serial_init(void) | |||
996 | continue; | 996 | continue; |
997 | device = platform_device_register_simple(SND_SERIAL_DRIVER, | 997 | device = platform_device_register_simple(SND_SERIAL_DRIVER, |
998 | i, NULL, 0); | 998 | i, NULL, 0); |
999 | if (IS_ERR(device)) { | 999 | if (IS_ERR(device)) |
1000 | err = PTR_ERR(device); | 1000 | continue; |
1001 | goto errout; | ||
1002 | } | ||
1003 | devices[i] = device; | 1001 | devices[i] = device; |
1004 | cards++; | 1002 | cards++; |
1005 | } | 1003 | } |
@@ -1007,14 +1005,10 @@ static int __init alsa_card_serial_init(void) | |||
1007 | #ifdef MODULE | 1005 | #ifdef MODULE |
1008 | printk(KERN_ERR "serial midi soundcard not found or device busy\n"); | 1006 | printk(KERN_ERR "serial midi soundcard not found or device busy\n"); |
1009 | #endif | 1007 | #endif |
1010 | err = -ENODEV; | 1008 | snd_serial_unregister_all(); |
1011 | goto errout; | 1009 | return -ENODEV; |
1012 | } | 1010 | } |
1013 | return 0; | 1011 | return 0; |
1014 | |||
1015 | errout: | ||
1016 | snd_serial_unregister_all(); | ||
1017 | return err; | ||
1018 | } | 1012 | } |
1019 | 1013 | ||
1020 | static void __exit alsa_card_serial_exit(void) | 1014 | static void __exit alsa_card_serial_exit(void) |
diff --git a/sound/drivers/virmidi.c b/sound/drivers/virmidi.c index a3ee306239c9..26eb2499d442 100644 --- a/sound/drivers/virmidi.c +++ b/sound/drivers/virmidi.c | |||
@@ -169,10 +169,8 @@ static int __init alsa_card_virmidi_init(void) | |||
169 | continue; | 169 | continue; |
170 | device = platform_device_register_simple(SND_VIRMIDI_DRIVER, | 170 | device = platform_device_register_simple(SND_VIRMIDI_DRIVER, |
171 | i, NULL, 0); | 171 | i, NULL, 0); |
172 | if (IS_ERR(device)) { | 172 | if (IS_ERR(device)) |
173 | err = PTR_ERR(device); | 173 | continue; |
174 | goto errout; | ||
175 | } | ||
176 | devices[i] = device; | 174 | devices[i] = device; |
177 | cards++; | 175 | cards++; |
178 | } | 176 | } |
@@ -180,14 +178,10 @@ static int __init alsa_card_virmidi_init(void) | |||
180 | #ifdef MODULE | 178 | #ifdef MODULE |
181 | printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n"); | 179 | printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n"); |
182 | #endif | 180 | #endif |
183 | err = -ENODEV; | 181 | snd_virmidi_unregister_all(); |
184 | goto errout; | 182 | return -ENODEV; |
185 | } | 183 | } |
186 | return 0; | 184 | return 0; |
187 | |||
188 | errout: | ||
189 | snd_virmidi_unregister_all(); | ||
190 | return err; | ||
191 | } | 185 | } |
192 | 186 | ||
193 | static void __exit alsa_card_virmidi_exit(void) | 187 | static void __exit alsa_card_virmidi_exit(void) |