[alsa-devel] Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?

David Henningsson david.henningsson at canonical.com
Fri May 20 16:51:13 CEST 2011

On 2011-05-20 15:46, Takashi Iwai wrote:
> At Fri, 20 May 2011 15:33:56 +0200,
> David Henningsson wrote:
>> I'm far from sure, but I could be on to something...
>> Looking at the code for azx_via_get_position, it seems that for
>> recording streams, it accesses a register at position
>> VIA_IN_STREAM0_FIFO_SIZE_OFFSET = 0x90. Looking at the datasheet for
>> SB700, that register is not even present. This does not seem right to me.
>> Could it be that we should use POS_FIX_LPIB by default for AMD/ATI
>> chipsets instead? It seems more reasonable to me.
>> In addition, I looked through some of the commits for quirking to
>> POS_FIX_LPIB and the four I checked were all ATI chipsets.
>> So; I've tried adding:
>> options snd-hda-intel position_fix=1
>> to /etc/modprobe.d/alsa-base.conf
>> ...to my machine with the infamous [1002:4383] controller (and
>> rebooted), and the few times I've tested, recording worked successfully
>> with pulseaudio. So could you please follow this up with testing on your
>> machines to see if we have actually managed to solve this long-standing bug?
>> The only annoying thing is that I didn't realise this earlier :-/
> Hmm, I took this as default as it seems fixing the issue on machines,
> indeed.  Actually I had to use this option first for removing
> recording noises on AMD Hudson.  But, maybe I need to double-check
> again after the snoop bit and other workarounds.
> The FIFO size might got wrong on AMD.  In that case, the driver
> calculates as if FIFO = 0.  But, it can still help for correcting the
> position via position-buffer vs LPIB comparison.
> For the real check, we should put some debug prints on real machines.

Hey, you're faster than I am :-) Ok, so there actually is a FIFO 
register (I read the wrong table). But the position buffer is dead and 
always read as zero.

I did some debug print which is pasted here: http://paste.ubuntu.com/610637/

If LPIB only gives you occasional recording noises, perhaps we need a 
new type of position-fix that adds some margin (e g round down to 
nearest multiple of fifo-size, then subtract one fifo-size or something)?

David Henningsson, Canonical Ltd.

More information about the Alsa-devel mailing list