]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/pci/riptide/riptide.c
[ALSA] add MODULE_FIRMWARE entries
[mv-sheeva.git] / sound / pci / riptide / riptide.c
index ec4899147e1dcd0d221bdf1a5e7c28c2cedb36a0..8e5410483e67a0f851ea99c9209589739a143282 100644 (file)
@@ -117,6 +117,7 @@ MODULE_AUTHOR("Peter Gruber <nokos@gmx.net>");
 MODULE_DESCRIPTION("riptide");
 MODULE_LICENSE("GPL");
 MODULE_SUPPORTED_DEVICE("{{Conexant,Riptide}}");
+MODULE_FIRMWARE("riptide.hex");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
@@ -1178,9 +1179,9 @@ static int riptide_suspend(struct pci_dev *pci, pm_message_t state)
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
        snd_pcm_suspend_all(chip->pcm);
        snd_ac97_suspend(chip->ac97);
-       pci_set_power_state(pci, PCI_D3hot);
        pci_disable_device(pci);
        pci_save_state(pci);
+       pci_set_power_state(pci, pci_choose_state(pci, state));
        return 0;
 }
 
@@ -1189,9 +1190,14 @@ static int riptide_resume(struct pci_dev *pci)
        struct snd_card *card = pci_get_drvdata(pci);
        struct snd_riptide *chip = card->private_data;
 
-       pci_restore_state(pci);
-       pci_enable_device(pci);
        pci_set_power_state(pci, PCI_D0);
+       pci_restore_state(pci);
+       if (pci_enable_device(pci) < 0) {
+               printk(KERN_ERR "riptide: pci_enable_device failed, "
+                      "disabling device\n");
+               snd_card_disconnect(card);
+               return -EIO;
+       }
        pci_set_master(pci);
        snd_riptide_initialize(chip);
        snd_ac97_resume(chip->ac97);
@@ -1894,9 +1900,8 @@ snd_riptide_create(struct snd_card *card, struct pci_dev *pci,
        hwport = (struct riptideport *)chip->port;
        UNSET_AIE(hwport);
 
-       if (request_irq
-           (pci->irq, snd_riptide_interrupt, IRQF_DISABLED | IRQF_SHARED,
-            "RIPTIDE", chip)) {
+       if (request_irq(pci->irq, snd_riptide_interrupt, IRQF_SHARED,
+                       "RIPTIDE", chip)) {
                snd_printk(KERN_ERR "Riptide: unable to grab IRQ %d\n",
                           pci->irq);
                snd_riptide_free(chip);
@@ -1915,6 +1920,8 @@ snd_riptide_create(struct snd_card *card, struct pci_dev *pci,
                return err;
        }
 
+       snd_card_set_dev(card, &pci->dev);
+
        *rchip = chip;
        return 0;
 }