[alsa-devel] When I got sound back by "kernel: hda-intel: Invalid position buffer, using LPIB read method instead."(random fallover)
When I got sound back by "kernel: hda-intel: Invalid position buffer, using LPIB read method instead."(random fallover)
It doesn't mean succeed. Sometimes sound get back and sometimes not, at random.
At Sun, 15 Mar 2009 08:33:26 +0900, Emmanuel Chanel wrote:
When I got sound back by "kernel: hda-intel: Invalid position buffer, using LPIB read method instead."(random fallover)
It doesn't mean succeed. Sometimes sound get back and sometimes not, at random.
First off, it's no fatal error, so no big worry about it. If it's annoying, just use position_fix=1 for the time being.
Looks like the position buffer read is unstable on ATI hardwares. Maybe we should use the similar workaround like VIA controller. A test patch is blow. Please give it a try and report back.
thanks,
Takashi
--- diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 92a73e8..57166fe 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -2059,26 +2059,31 @@ static int __devinit check_position_fix(struct azx *chip, int fix) { const struct snd_pci_quirk *q;
- /* Check VIA HD Audio Controller exist */ - if (chip->pci->vendor == PCI_VENDOR_ID_VIA && - chip->pci->device == VIA_HDAC_DEVICE_ID) { + switch (fix) { + case POS_FIX_LPIB: + case POS_FIX_POSBUF: + return fix; + } + + /* Check VIA/ATI HD Audio Controller exist */ + switch (chip->driver_type) { + case AZX_DRIVER_VIA: + case AZX_DRIVER_ATI: chip->via_dmapos_patch = 1; /* Use link position directly, avoid any transfer problem. */ return POS_FIX_LPIB; } chip->via_dmapos_patch = 0;
- if (fix == POS_FIX_AUTO) { - 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; - } + 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 fix; + return POS_FIX_AUTO; }
/*
participants (2)
-
Emmanuel Chanel
-
Takashi Iwai