]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - sound/pci/cs5535audio/cs5535audio.c
[ALSA] cs5535audio: update PCI device handling in suspend/resume
[linux-2.6-omap-h63xx.git] / sound / pci / cs5535audio / cs5535audio.c
index 8f46190f24addb37424ed5b95102bc1b95959586..b8e75ef9c1e6f6672723fb4c5a689f5efc36d1d8 100644 (file)
@@ -56,19 +56,18 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
        {}
 };
 
-static int index = SNDRV_DEFAULT_IDX1;
-static char *id = SNDRV_DEFAULT_STR1;
-/* for backward compatibility */
-static int enable; 
+static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
+static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
+static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
 
-module_param(index, int, 0444);
+module_param_array(index, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for " DRIVER_NAME);
-module_param(id, charp, 0444);
+module_param_array(id, charp, NULL, 0444);
 MODULE_PARM_DESC(id, "ID string for " DRIVER_NAME);
-module_param(enable, bool, 0444);
-MODULE_PARM_DESC(enable, "Enable for " DRIVER_NAME);
+module_param_array(enable, bool, NULL, 0444);
+MODULE_PARM_DESC(enable, "Enable " DRIVER_NAME);
 
-static struct pci_device_id snd_cs5535audio_ids[] __devinitdata = {
+static struct pci_device_id snd_cs5535audio_ids[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_AUDIO) },
        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_AUDIO) },
        {}
@@ -111,7 +110,8 @@ static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au,
                udelay(1);
        } while (--timeout);
        if (!timeout)
-               snd_printk(KERN_ERR "Failure reading cs5535 codec\n");
+               snd_printk(KERN_ERR "Failure reading codec reg 0x%x,"
+                                       "Last value=0x%x\n", reg, val);
 
        return (unsigned short) val;
 }
@@ -203,8 +203,7 @@ static void process_bm1_irq(struct cs5535audio *cs5535au)
        }
 }
 
-static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id,
-                                            struct pt_regs *regs)
+static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id)
 {
        u16 acc_irq_stat;
        u8 bm_stat;
@@ -321,7 +320,7 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,
        cs5535au->port = pci_resource_start(pci, 0);
 
        if (request_irq(pci->irq, snd_cs5535audio_interrupt,
-                       SA_INTERRUPT|SA_SHIRQ, "CS5535 Audio", cs5535au)) {
+                       IRQF_SHARED, "CS5535 Audio", cs5535au)) {
                snd_printk("unable to grab IRQ %d\n", pci->irq);
                err = -EBUSY;
                goto sndfail;
@@ -358,8 +357,12 @@ static int __devinit snd_cs5535audio_probe(struct pci_dev *pci,
 
        if (dev >= SNDRV_CARDS)
                return -ENODEV;
+       if (!enable[dev]) {
+               dev++;
+               return -ENOENT;
+       }
 
-       card = snd_card_new(index, id, THIS_MODULE, 0);
+       card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
        if (card == NULL)
                return -ENOMEM;