aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-08-21 13:17:46 -0400
committerJaroslav Kysela <perex@suse.cz>2006-09-23 04:42:47 -0400
commit7376d013fc6d3a45d748e0ce758ca9412b01b9dd (patch)
treeebe54b3ce6e34faf2a1fc8568b754a299174da2d /sound/pci
parent93f09c4cc111506db2ffa6220b7a3d7f73e41aa3 (diff)
[ALSA] intel_hda: MSI support
Simple patch to enable Message Signalled Interrupts for the HDA Intel audio controller. Tested with: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 03) MSI is better because it means audio doesn't end up sharing IRQ with USB. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/hda_intel.c10
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;
55static int position_fix; 55static int position_fix;
56static int probe_mask = -1; 56static int probe_mask = -1;
57static int single_cmd; 57static int single_cmd;
58static int disable_msi;
58 59
59module_param(index, int, 0444); 60module_param(index, int, 0444);
60MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); 61MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
@@ -68,6 +69,8 @@ module_param(probe_mask, int, 0444);
68MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); 69MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
69module_param(single_cmd, bool, 0444); 70module_param(single_cmd, bool, 0444);
70MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs (for debugging only)."); 71MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs (for debugging only).");
72module_param(disable_msi, int, 0);
73MODULE_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);