Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
[sfrench/cifs-2.6.git] / sound / drivers / virmidi.c
index a3ee306239c92930f4a1baaf86b0bde96a977138..46f3d34860679c677abe9ee83a32316f5005e243 100644 (file)
@@ -44,7 +44,6 @@
 #include <sound/driver.h>
 #include <linux/init.h>
 #include <linux/wait.h>
-#include <linux/sched.h>
 #include <linux/err.h>
 #include <linux/platform_device.h>
 #include <linux/moduleparam.h>
@@ -85,7 +84,7 @@ struct snd_card_virmidi {
 static struct platform_device *devices[SNDRV_CARDS];
 
 
-static int __init snd_virmidi_probe(struct platform_device *devptr)
+static int __devinit snd_virmidi_probe(struct platform_device *devptr)
 {
        struct snd_card *card;
        struct snd_card_virmidi *vmidi;
@@ -129,7 +128,7 @@ static int __init snd_virmidi_probe(struct platform_device *devptr)
        return err;
 }
 
-static int snd_virmidi_remove(struct platform_device *devptr)
+static int __devexit snd_virmidi_remove(struct platform_device *devptr)
 {
        snd_card_free(platform_get_drvdata(devptr));
        platform_set_drvdata(devptr, NULL);
@@ -140,7 +139,7 @@ static int snd_virmidi_remove(struct platform_device *devptr)
 
 static struct platform_driver snd_virmidi_driver = {
        .probe          = snd_virmidi_probe,
-       .remove         = snd_virmidi_remove,
+       .remove         = __devexit_p(snd_virmidi_remove),
        .driver         = {
                .name   = SND_VIRMIDI_DRIVER
        },
@@ -169,9 +168,11 @@ static int __init alsa_card_virmidi_init(void)
                        continue;
                device = platform_device_register_simple(SND_VIRMIDI_DRIVER,
                                                         i, NULL, 0);
-               if (IS_ERR(device)) {
-                       err = PTR_ERR(device);
-                       goto errout;
+               if (IS_ERR(device))
+                       continue;
+               if (!platform_get_drvdata(device)) {
+                       platform_device_unregister(device);
+                       continue;
                }
                devices[i] = device;
                cards++;
@@ -180,14 +181,10 @@ static int __init alsa_card_virmidi_init(void)
 #ifdef MODULE
                printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n");
 #endif
-               err = -ENODEV;
-               goto errout;
+               snd_virmidi_unregister_all();
+               return -ENODEV;
        }
        return 0;
-
- errout:
-       snd_virmidi_unregister_all();
-       return err;
 }
 
 static void __exit alsa_card_virmidi_exit(void)