diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-08-11 08:21:26 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-08-11 08:25:46 -0400 |
commit | 4d8e22e0f6aacb365db2cb9bf69e38310b37f418 (patch) | |
tree | f6606ad3d83c623834a3aaa13d69c546034f5a42 /sound/pci/hda/hda_intel.c | |
parent | b59bdf3b0ca11bfc6a539012431d751deaa65b32 (diff) |
ALSA: hda - Add a white-list for MSI option
Created a white-list to enable MSI since some devices require MSI
explicitly due to BIOS/ACPI problems. Simply using a quirk list.
As the first case, take HP Compaq CQ40.
Reference: Novell bnc#529971
https://bugzilla.novell.com/show_bug.cgi?id=529971
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 754de4f82013..20a66f85f0a4 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -2299,6 +2299,30 @@ static void __devinit check_probe_mask(struct azx *chip, int dev) | |||
2299 | } | 2299 | } |
2300 | } | 2300 | } |
2301 | 2301 | ||
2302 | /* | ||
2303 | * white-list for enable_msi | ||
2304 | */ | ||
2305 | static struct snd_pci_quirk msi_white_list[] __devinitdata = { | ||
2306 | SND_PCI_QUIRK(0x103c, 0x3607, "HP Compa CQ40", 1), | ||
2307 | {} | ||
2308 | }; | ||
2309 | |||
2310 | static void __devinit check_msi(struct azx *chip) | ||
2311 | { | ||
2312 | const struct snd_pci_quirk *q; | ||
2313 | |||
2314 | chip->msi = enable_msi; | ||
2315 | if (chip->msi) | ||
2316 | return; | ||
2317 | q = snd_pci_quirk_lookup(chip->pci, msi_white_list); | ||
2318 | if (q) { | ||
2319 | printk(KERN_INFO | ||
2320 | "hda_intel: msi for device %04x:%04x set to %d\n", | ||
2321 | q->subvendor, q->subdevice, q->value); | ||
2322 | chip->msi = q->value; | ||
2323 | } | ||
2324 | } | ||
2325 | |||
2302 | 2326 | ||
2303 | /* | 2327 | /* |
2304 | * constructor | 2328 | * constructor |
@@ -2333,7 +2357,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
2333 | chip->pci = pci; | 2357 | chip->pci = pci; |
2334 | chip->irq = -1; | 2358 | chip->irq = -1; |
2335 | chip->driver_type = driver_type; | 2359 | chip->driver_type = driver_type; |
2336 | chip->msi = enable_msi; | 2360 | check_msi(chip); |
2337 | chip->dev_index = dev; | 2361 | chip->dev_index = dev; |
2338 | INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work); | 2362 | INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work); |
2339 | 2363 | ||