]> err.no Git - linux-2.6/blobdiff - sound/drivers/mtpav.c
[MTD] physmap: Add support for 64 bit resources
[linux-2.6] / sound / drivers / mtpav.c
index d9c4e224fa5fdd57cb18ab6ea1fbe74aa6b72e58..a9ff391258e707c3ac7bf696e457e61de0fe0d92 100644 (file)
@@ -95,6 +95,8 @@ MODULE_PARM_DESC(irq, "Parallel IRQ # for MotuMTPAV MIDI.");
 module_param(hwports, int, 0444);
 MODULE_PARM_DESC(hwports, "Hardware ports # for MotuMTPAV MIDI.");
 
+static struct platform_device *device;
+
 /*
  *      defines
  */
@@ -568,7 +570,7 @@ static void snd_mtpav_read_bytes(struct mtpav *mcrd)
        } while (sbyt & SIGS_BYTE);
 }
 
-static irqreturn_t snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_mtpav_irqh(int irq, void *dev_id)
 {
        struct mtpav *mcard = dev_id;
 
@@ -588,7 +590,7 @@ static int __init snd_mtpav_get_ISA(struct mtpav * mcard)
                return -EBUSY;
        }
        mcard->port = port;
-       if (request_irq(irq, snd_mtpav_irqh, SA_INTERRUPT, "MOTU MTPAV", mcard)) {
+       if (request_irq(irq, snd_mtpav_irqh, IRQF_DISABLED, "MOTU MTPAV", mcard)) {
                snd_printk("MTVAP IRQ %d busy\n", irq);
                return -EBUSY;
        }
@@ -763,21 +765,25 @@ static struct platform_driver snd_mtpav_driver = {
 static int __init alsa_card_mtpav_init(void)
 {
        int err;
-       struct platform_device *device;
 
        if ((err = platform_driver_register(&snd_mtpav_driver)) < 0)
                return err;
 
        device = platform_device_register_simple(SND_MTPAV_DRIVER, -1, NULL, 0);
-       if (IS_ERR(device)) {
-               platform_driver_unregister(&snd_mtpav_driver);
-               return PTR_ERR(device);
-       }
-       return 0;
+       if (!IS_ERR(device)) {
+               if (platform_get_drvdata(device))
+                       return 0;
+               platform_device_unregister(device);
+               err = -ENODEV;
+       } else
+               err = PTR_ERR(device);
+       platform_driver_unregister(&snd_mtpav_driver);
+       return err;
 }
 
 static void __exit alsa_card_mtpav_exit(void)
 {
+       platform_device_unregister(device);
        platform_driver_unregister(&snd_mtpav_driver);
 }