[PATCH] ALSA: HDA: Correctly apply position_fix quirks for ATI and VIA controllers
BugLink: http://launchpad.net/bugs/465942 BugLink: http://launchpad.net/bugs/580749 BugLink: http://launchpad.net/bugs/587546
Position_fix quirks for specific machines now override the default position_fix behavior for all HDA controllers.
Signed-off-by: David Henningsson david.henningsson@canonical.com --- sound/pci/hda/hda_intel.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 741ad32..51b088e 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2264,12 +2264,24 @@ static int __devinit check_position_fix(struct azx *chip, int fix) { const struct snd_pci_quirk *q;
+ chip->via_dmapos_patch = 0; + switch (fix) { case POS_FIX_LPIB: case POS_FIX_POSBUF: return fix; }
+ q = snd_pci_quirk_lookup(chip->pci, position_fix_list); + if (q) { + /* Note that this implicitly sets via_dmapos_patch to zero */ + printk(KERN_INFO + "hda_intel: position_fix set to %d " + "for device %04x:%04x\n", + q->value, q->subvendor, q->subdevice); + return q->value; + } + /* Check VIA/ATI HD Audio Controller exist */ switch (chip->driver_type) { case AZX_DRIVER_VIA: @@ -2278,16 +2290,7 @@ static int __devinit check_position_fix(struct azx *chip, int fix) /* Use link position directly, avoid any transfer problem. */ return POS_FIX_LPIB; } - chip->via_dmapos_patch = 0;
- q = snd_pci_quirk_lookup(chip->pci, position_fix_list); - if (q) { - printk(KERN_INFO - "hda_intel: position_fix set to %d " - "for device %04x:%04x\n", - q->value, q->subvendor, q->subdevice); - return q->value; - } return POS_FIX_AUTO; }
participants (1)
-
David Henningsson