[ALSA] unregister platform device again if probe was unsuccessful
authorRene Herman <rene.herman@keyaccess.nl>
Tue, 11 Apr 2006 12:09:37 +0000 (14:09 +0200)
committerJaroslav Kysela <perex@suse.cz>
Wed, 12 Apr 2006 09:55:32 +0000 (11:55 +0200)
Unregister the platform device again if the probe was unsuccessful.

This restores the behaviour of not loading the driver on probe() failure.

Signed-off-by: Rene Herman <rene.herman@keyaccess.nl>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
19 files changed:
sound/isa/ad1848/ad1848.c
sound/isa/adlib.c
sound/isa/cmi8330.c
sound/isa/cs423x/cs4231.c
sound/isa/cs423x/cs4236.c
sound/isa/es1688/es1688.c
sound/isa/es18xx.c
sound/isa/gus/gusclassic.c
sound/isa/gus/gusextreme.c
sound/isa/gus/gusmax.c
sound/isa/gus/interwave.c
sound/isa/opl3sa2.c
sound/isa/opti9xx/miro.c
sound/isa/opti9xx/opti92x-ad1848.c
sound/isa/sb/sb16.c
sound/isa/sb/sb8.c
sound/isa/sgalaxy.c
sound/isa/sscape.c
sound/isa/wavefront/wavefront.c

index 1f460eb..99908e4 100644 (file)
@@ -195,6 +195,10 @@ static int __init alsa_card_ad1848_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index a253a14..1124344 100644 (file)
@@ -43,8 +43,7 @@ static int __devinit snd_adlib_probe(struct platform_device *device)
        struct snd_card *card;
        struct snd_opl3 *opl3;
 
-       int error;
-       int i = device->id;
+       int error, i = device->id;
 
        if (port[i] == SNDRV_AUTO_PORT) {
                snd_printk(KERN_ERR DRV_NAME ": please specify port\n");
@@ -95,8 +94,7 @@ static int __devinit snd_adlib_probe(struct platform_device *device)
        return 0;
 
 out1:  snd_card_free(card);
- out0: error = -EINVAL; /* FIXME: should be the original error code */
-       return error;
+out0:  return error;
 }
 
 static int __devexit snd_adlib_remove(struct platform_device *device)
@@ -134,6 +132,11 @@ static int __init alsa_card_adlib_init(void)
                if (IS_ERR(device))
                        continue;
 
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
+
                devices[i] = device;
                cards++;
        }
index 35780b8..3c1e9fd 100644 (file)
@@ -701,6 +701,10 @@ static int __init alsa_card_cmi8330_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                cards++;
        }
index 073dac9..397310f 100644 (file)
@@ -211,6 +211,10 @@ static int __init alsa_card_cs4231_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index b07a62b..f7fa779 100644 (file)
@@ -782,6 +782,10 @@ static int __init alsa_card_cs423x_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                snd_cs423x_devices++;
        }
index d83d710..e90689e 100644 (file)
@@ -215,6 +215,10 @@ static int __init alsa_card_es1688_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index 0da249b..a36ec1d 100644 (file)
@@ -2393,6 +2393,10 @@ static int __init alsa_card_es18xx_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                cards++;
        }
index ed34427..37057a3 100644 (file)
@@ -255,6 +255,10 @@ static int __init alsa_card_gusclassic_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index aa312de..05852fc 100644 (file)
@@ -365,6 +365,10 @@ static int __init alsa_card_gusextreme_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index a733fab..fcf2c8f 100644 (file)
@@ -392,6 +392,10 @@ static int __init alsa_card_gusmax_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index 4be472e..4298d33 100644 (file)
@@ -949,6 +949,10 @@ static int __init alsa_card_interwave_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                cards++;
        }
index 02ae73e..6d88905 100644 (file)
@@ -964,6 +964,10 @@ static int __init alsa_card_opl3sa2_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                snd_opl3sa2_devices++;
        }
index 09384d0..83d64bc 100644 (file)
@@ -1436,8 +1436,11 @@ static int __init alsa_card_miro_init(void)
        if ((error = platform_driver_register(&snd_miro_driver)) < 0)
                return error;
        device = platform_device_register_simple(DRIVER_NAME, -1, NULL, 0);
-       if (! IS_ERR(device))
-               return 0;
+       if (! IS_ERR(device)) {
+               if (platform_get_drvdata(device))
+                       return 0;
+               platform_device_unregister(device);
+       }
 #ifdef MODULE
        printk(KERN_ERR "no miro soundcard found\n");
 #endif
index 65b28cb..8ee0d70 100644 (file)
@@ -2099,8 +2099,11 @@ static int __init alsa_card_opti9xx_init(void)
                        return error;
                device = platform_device_register_simple(DRIVER_NAME, -1, NULL, 0);
                if (!IS_ERR(device)) {
-                       snd_opti9xx_platform_device = device;
-                       return 0;
+                       if (platform_get_drvdata(device)) {
+                               snd_opti9xx_platform_device = device;
+                               return 0;
+                       }
+                       platform_device_unregister(device);
                }
                platform_driver_unregister(&snd_opti9xx_driver);
        }
index 24fa190..6333f90 100644 (file)
@@ -722,6 +722,10 @@ static int __init alsa_card_sb16_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                cards++;
        }
index f75eeb0..141400c 100644 (file)
@@ -266,6 +266,10 @@ static int __init alsa_card_sb8_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index f01a80a..09c8e8c 100644 (file)
@@ -368,6 +368,10 @@ static int __init alsa_card_sgalaxy_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                devices[i] = device;
                cards++;
        }
index 532f6e0..d2a856f 100644 (file)
@@ -1438,6 +1438,10 @@ static int __init sscape_manual_probe(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
        }
        return 0;
index ed9d017..7ae86f8 100644 (file)
@@ -724,6 +724,10 @@ static int __init alsa_card_wavefront_init(void)
                                                         i, NULL, 0);
                if (IS_ERR(device))
                        continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
+               }
                platform_devices[i] = device;
                cards++;
        }