Merge branch 'merge'
[sfrench/cifs-2.6.git] / sound / isa / sscape.c
index 5fb981c0a281ca63ca283923e5fdeb045e50044f..d2a856f0fde201d20e47da42d3960dea8d6537cd 100644 (file)
@@ -69,9 +69,9 @@ module_param_array(dma, int, NULL, 0444);
 MODULE_PARM_DESC(dma, "DMA # for SoundScape driver.");
 
 static struct platform_device *platform_devices[SNDRV_CARDS];
-static int pnp_registered;
   
 #ifdef CONFIG_PNP
+static int pnp_registered;
 static struct pnp_card_device_id sscape_pnpids[] = {
        { .id = "ENS3081", .devs = { { "ENS0000" } } },
        { .id = "" }    /* end */
@@ -1255,7 +1255,7 @@ static int __devinit create_sscape(int dev, struct snd_card **rcardp)
 }
 
 
-static int __init snd_sscape_probe(struct platform_device *pdev)
+static int __devinit snd_sscape_probe(struct platform_device *pdev)
 {
        int dev = pdev->id;
        struct snd_card *card;
@@ -1391,8 +1391,10 @@ static void __init_or_module sscape_unregister_all(void)
 {
        int i;
 
+#ifdef CONFIG_PNP
        if (pnp_registered)
                pnp_unregister_card_driver(&sscape_pnpc_driver);
+#endif
        for (i = 0; i < ARRAY_SIZE(platform_devices); ++i)
                platform_device_unregister(platform_devices[i]);
        platform_driver_unregister(&snd_sscape_driver);
@@ -1425,8 +1427,8 @@ static int __init sscape_manual_probe(void)
                    dma[i] == SNDRV_AUTO_DMA) {
                        printk(KERN_INFO
                               "sscape: insufficient parameters, need IO, IRQ, MPU-IRQ and DMA\n");
-                       ret = -ENXIO;
-                       goto errout;
+                       sscape_unregister_all();
+                       return -ENXIO;
                }
 
                /*
@@ -1434,17 +1436,15 @@ static int __init sscape_manual_probe(void)
                 */
                device = platform_device_register_simple(SSCAPE_DRIVER,
                                                         i, NULL, 0);
-               if (IS_ERR(device)) {
-                       ret = PTR_ERR(device);
-                       goto errout;
+               if (IS_ERR(device))
+                       continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
                }
                platform_devices[i] = device;
        }
        return 0;
-
- errout:
-       sscape_unregister_all();
-       return ret;
 }
 
 static void sscape_exit(void)
@@ -1466,8 +1466,10 @@ static int __init sscape_init(void)
        ret = sscape_manual_probe();
        if (ret < 0)
                return ret;
-       if (pnp_register_card_driver(&sscape_pnpc_driver) >= 0)
+#ifdef CONFIG_PNP
+       if (pnp_register_card_driver(&sscape_pnpc_driver) == 0)
                pnp_registered = 1;
+#endif
        return 0;
 }