diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index ce75e07aaa2a..c9ae9f778928 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -55,6 +55,7 @@ static char *model; | |||
55 | static int position_fix; | 55 | static int position_fix; |
56 | static int probe_mask = -1; | 56 | static int probe_mask = -1; |
57 | static int single_cmd; | 57 | static int single_cmd; |
58 | static int disable_msi; | ||
58 | 59 | ||
59 | module_param(index, int, 0444); | 60 | module_param(index, int, 0444); |
60 | MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); | 61 | MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); |
@@ -68,6 +69,8 @@ module_param(probe_mask, int, 0444); | |||
68 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); | 69 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); |
69 | module_param(single_cmd, bool, 0444); | 70 | module_param(single_cmd, bool, 0444); |
70 | MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs (for debugging only)."); | 71 | MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs (for debugging only)."); |
72 | module_param(disable_msi, int, 0); | ||
73 | MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)"); | ||
71 | 74 | ||
72 | 75 | ||
73 | /* just for backward compatibility */ | 76 | /* just for backward compatibility */ |
@@ -1418,8 +1421,10 @@ static int azx_free(struct azx *chip) | |||
1418 | msleep(1); | 1421 | msleep(1); |
1419 | } | 1422 | } |
1420 | 1423 | ||
1421 | if (chip->irq >= 0) | 1424 | if (chip->irq >= 0) { |
1425 | pci_disable_msi(chip->pci); | ||
1422 | free_irq(chip->irq, (void*)chip); | 1426 | free_irq(chip->irq, (void*)chip); |
1427 | } | ||
1423 | if (chip->remap_addr) | 1428 | if (chip->remap_addr) |
1424 | iounmap(chip->remap_addr); | 1429 | iounmap(chip->remap_addr); |
1425 | 1430 | ||
@@ -1502,6 +1507,9 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
1502 | goto errout; | 1507 | goto errout; |
1503 | } | 1508 | } |
1504 | 1509 | ||
1510 | if (!disable_msi) | ||
1511 | pci_enable_msi(pci); | ||
1512 | |||
1505 | if (request_irq(pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED, | 1513 | if (request_irq(pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED, |
1506 | "HDA Intel", (void*)chip)) { | 1514 | "HDA Intel", (void*)chip)) { |
1507 | snd_printk(KERN_ERR SFX "unable to grab IRQ %d\n", pci->irq); | 1515 | snd_printk(KERN_ERR SFX "unable to grab IRQ %d\n", pci->irq); |