diff options
Diffstat (limited to 'sound/isa/cs423x/cs4236.c')
| -rw-r--r-- | sound/isa/cs423x/cs4236.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c index 382bb17ef49f..f7fa779347ff 100644 --- a/sound/isa/cs423x/cs4236.c +++ b/sound/isa/cs423x/cs4236.c | |||
| @@ -780,9 +780,11 @@ static int __init alsa_card_cs423x_init(void) | |||
| 780 | continue; | 780 | continue; |
| 781 | device = platform_device_register_simple(CS423X_DRIVER, | 781 | device = platform_device_register_simple(CS423X_DRIVER, |
| 782 | i, NULL, 0); | 782 | i, NULL, 0); |
| 783 | if (IS_ERR(device)) { | 783 | if (IS_ERR(device)) |
| 784 | err = PTR_ERR(device); | 784 | continue; |
| 785 | goto errout; | 785 | if (!platform_get_drvdata(device)) { |
| 786 | platform_device_unregister(device); | ||
| 787 | continue; | ||
| 786 | } | 788 | } |
| 787 | platform_devices[i] = device; | 789 | platform_devices[i] = device; |
| 788 | snd_cs423x_devices++; | 790 | snd_cs423x_devices++; |
| @@ -802,14 +804,10 @@ static int __init alsa_card_cs423x_init(void) | |||
| 802 | #ifdef MODULE | 804 | #ifdef MODULE |
| 803 | printk(KERN_ERR IDENT " soundcard not found or device busy\n"); | 805 | printk(KERN_ERR IDENT " soundcard not found or device busy\n"); |
| 804 | #endif | 806 | #endif |
| 805 | err = -ENODEV; | 807 | snd_cs423x_unregister_all(); |
| 806 | goto errout; | 808 | return -ENODEV; |
| 807 | } | 809 | } |
| 808 | return 0; | 810 | return 0; |
| 809 | |||
| 810 | errout: | ||
| 811 | snd_cs423x_unregister_all(); | ||
| 812 | return err; | ||
| 813 | } | 811 | } |
| 814 | 812 | ||
| 815 | static void __exit alsa_card_cs423x_exit(void) | 813 | static void __exit alsa_card_cs423x_exit(void) |
