diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-08-21 13:17:46 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-09-23 04:42:47 -0400 |
commit | 7376d013fc6d3a45d748e0ce758ca9412b01b9dd (patch) | |
tree | ebe54b3ce6e34faf2a1fc8568b754a299174da2d | |
parent | 93f09c4cc111506db2ffa6220b7a3d7f73e41aa3 (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>
-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); |