kmemtrace, mm: fix slab.h dependency problem in mm/failslab.c
[safe/jmp/linux-2.6] / sound / drivers / mtpav.c
index d9c4e22..2f8f295 100644 (file)
@@ -50,7 +50,6 @@
  *
  */
 
-#include <sound/driver.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/err.h>
@@ -95,6 +94,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
  */
@@ -302,8 +303,10 @@ static void snd_mtpav_output_port_write(struct mtpav *mtp_card,
 
                snd_mtpav_send_byte(mtp_card, 0xf5);
                snd_mtpav_send_byte(mtp_card, portp->hwport);
-               //snd_printk("new outport: 0x%x\n", (unsigned int) portp->hwport);
-
+               /*
+               snd_printk(KERN_DEBUG "new outport: 0x%x\n",
+                          (unsigned int) portp->hwport);
+               */
                if (!(outbyte & 0x80) && portp->running_status)
                        snd_mtpav_send_byte(mtp_card, portp->running_status);
        }
@@ -539,7 +542,7 @@ static void snd_mtpav_read_bytes(struct mtpav *mcrd)
 
        u8 sbyt = snd_mtpav_getreg(mcrd, SREG);
 
-       //printk("snd_mtpav_read_bytes() sbyt: 0x%x\n", sbyt);
+       /* printk(KERN_DEBUG "snd_mtpav_read_bytes() sbyt: 0x%x\n", sbyt); */
 
        if (!(sbyt & SIGS_BYTE))
                return;
@@ -568,7 +571,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;
 
@@ -581,15 +584,15 @@ static irqreturn_t snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
 /*
  * get ISA resources
  */
-static int __init snd_mtpav_get_ISA(struct mtpav * mcard)
+static int __devinit snd_mtpav_get_ISA(struct mtpav * mcard)
 {
        if ((mcard->res_port = request_region(port, 3, "MotuMTPAV MIDI")) == NULL) {
-               snd_printk("MTVAP port 0x%lx is busy\n", port);
+               snd_printk(KERN_ERR "MTVAP port 0x%lx is busy\n", port);
                return -EBUSY;
        }
        mcard->port = port;
-       if (request_irq(irq, snd_mtpav_irqh, SA_INTERRUPT, "MOTU MTPAV", mcard)) {
-               snd_printk("MTVAP IRQ %d busy\n", irq);
+       if (request_irq(irq, snd_mtpav_irqh, IRQF_DISABLED, "MOTU MTPAV", mcard)) {
+               snd_printk(KERN_ERR "MTVAP IRQ %d busy\n", irq);
                return -EBUSY;
        }
        mcard->irq = irq;
@@ -617,7 +620,7 @@ static struct snd_rawmidi_ops snd_mtpav_input = {
  * get RAWMIDI resources
  */
 
-static void __init snd_mtpav_set_name(struct mtpav *chip,
+static void __devinit snd_mtpav_set_name(struct mtpav *chip,
                                      struct snd_rawmidi_substream *substream)
 {
        if (substream->number >= 0 && substream->number < chip->num_ports)
@@ -632,7 +635,7 @@ static void __init snd_mtpav_set_name(struct mtpav *chip,
                strcpy(substream->name, "MTP broadcast");
 }
 
-static int __init snd_mtpav_get_RAWMIDI(struct mtpav *mcard)
+static int __devinit snd_mtpav_get_RAWMIDI(struct mtpav *mcard)
 {
        int rval;
        struct snd_rawmidi *rawmidi;
@@ -689,15 +692,15 @@ static void snd_mtpav_free(struct snd_card *card)
 
 /*
  */
-static int __init snd_mtpav_probe(struct platform_device *dev)
+static int __devinit snd_mtpav_probe(struct platform_device *dev)
 {
        struct snd_card *card;
        int err;
        struct mtpav *mtp_card;
 
-       card = snd_card_new(index, id, THIS_MODULE, sizeof(*mtp_card));
-       if (! card)
-               return -ENOMEM;
+       err = snd_card_create(index, id, THIS_MODULE, sizeof(*mtp_card), &card);
+       if (err < 0)
+               return err;
 
        mtp_card = card->private_data;
        spin_lock_init(&mtp_card->spinlock);
@@ -705,7 +708,6 @@ static int __init snd_mtpav_probe(struct platform_device *dev)
        mtp_card->card = card;
        mtp_card->irq = -1;
        mtp_card->share_irq = 0;
-       mtp_card->inmidiport = 0xffffffff;
        mtp_card->inmidistate = 0;
        mtp_card->outmidihwport = 0xffffffff;
        init_timer(&mtp_card->timer);
@@ -714,6 +716,12 @@ static int __init snd_mtpav_probe(struct platform_device *dev)
 
        card->private_free = snd_mtpav_free;
 
+       err = snd_mtpav_get_RAWMIDI(mtp_card);
+       if (err < 0)
+               goto __error;
+
+       mtp_card->inmidiport = mtp_card->num_ports + MTPAV_PIDX_BROADCAST;
+
        err = snd_mtpav_get_ISA(mtp_card);
        if (err < 0)
                goto __error;
@@ -723,10 +731,6 @@ static int __init snd_mtpav_probe(struct platform_device *dev)
        snprintf(card->longname, sizeof(card->longname),
                 "MTPAV on parallel port at 0x%lx", port);
 
-       err = snd_mtpav_get_RAWMIDI(mtp_card);
-       if (err < 0)
-               goto __error;
-
        snd_mtpav_portscan(mtp_card);
 
        snd_card_set_dev(card, &dev->dev);
@@ -743,7 +747,7 @@ static int __init snd_mtpav_probe(struct platform_device *dev)
        return err;
 }
 
-static int snd_mtpav_remove(struct platform_device *devptr)
+static int __devexit snd_mtpav_remove(struct platform_device *devptr)
 {
        snd_card_free(platform_get_drvdata(devptr));
        platform_set_drvdata(devptr, NULL);
@@ -754,7 +758,7 @@ static int snd_mtpav_remove(struct platform_device *devptr)
 
 static struct platform_driver snd_mtpav_driver = {
        .probe          = snd_mtpav_probe,
-       .remove         = snd_mtpav_remove,
+       .remove         = __devexit_p(snd_mtpav_remove),
        .driver         = {
                .name   = SND_MTPAV_DRIVER
        },
@@ -763,21 +767,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);
 }