diff options
Diffstat (limited to 'sound/isa/cs423x/cs4231.c')
| -rw-r--r-- | sound/isa/cs423x/cs4231.c | 16 | 
1 files changed, 7 insertions, 9 deletions
| diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c index a30dcd962525..397310f358b7 100644 --- a/sound/isa/cs423x/cs4231.c +++ b/sound/isa/cs423x/cs4231.c | |||
| @@ -209,9 +209,11 @@ static int __init alsa_card_cs4231_init(void) | |||
| 209 | continue; | 209 | continue; | 
| 210 | device = platform_device_register_simple(SND_CS4231_DRIVER, | 210 | device = platform_device_register_simple(SND_CS4231_DRIVER, | 
| 211 | i, NULL, 0); | 211 | i, NULL, 0); | 
| 212 | if (IS_ERR(device)) { | 212 | if (IS_ERR(device)) | 
| 213 | err = PTR_ERR(device); | 213 | continue; | 
| 214 | goto errout; | 214 | if (!platform_get_drvdata(device)) { | 
| 215 | platform_device_unregister(device); | ||
| 216 | continue; | ||
| 215 | } | 217 | } | 
| 216 | devices[i] = device; | 218 | devices[i] = device; | 
| 217 | cards++; | 219 | cards++; | 
| @@ -220,14 +222,10 @@ static int __init alsa_card_cs4231_init(void) | |||
| 220 | #ifdef MODULE | 222 | #ifdef MODULE | 
| 221 | printk(KERN_ERR "CS4231 soundcard not found or device busy\n"); | 223 | printk(KERN_ERR "CS4231 soundcard not found or device busy\n"); | 
| 222 | #endif | 224 | #endif | 
| 223 | err = -ENODEV; | 225 | snd_cs4231_unregister_all(); | 
| 224 | goto errout; | 226 | return -ENODEV; | 
| 225 | } | 227 | } | 
| 226 | return 0; | 228 | return 0; | 
| 227 | |||
| 228 | errout: | ||
| 229 | snd_cs4231_unregister_all(); | ||
| 230 | return err; | ||
| 231 | } | 229 | } | 
| 232 | 230 | ||
| 233 | static void __exit alsa_card_cs4231_exit(void) | 231 | static void __exit alsa_card_cs4231_exit(void) | 
