[alsa-devel] When I got sound back by "kernel: hda-intel: Invalid position buffer, using LPIB read method instead."(random fallover)
Takashi Iwai
tiwai at suse.de
Mon Mar 16 08:25:25 CET 2009
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;
}
/*
More information about the Alsa-devel
mailing list