[alsa-devel] Should we really use POS_FIX_VIACOMBO for AMD/ATI chipsets?
Takashi Iwai
tiwai at suse.de
Fri May 20 16:32:58 CEST 2011
At Fri, 20 May 2011 16:19:57 +0200,
Takashi Iwai wrote:
>
> At Fri, 20 May 2011 15:46:37 +0200,
> 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.
>
> Actually the values read there look not working with posbuf.
> Let's fix them to use POS_FIX_LPIB now.
The patch is below, commit 50e3bbf9898840eead86f90a43b3625a2b2f4112
as below.
Takashi
---
Subject: [PATCH] ALSA: hda - Use LPIB for ATI/AMD chipsets as default
ATI and AMD chipsets seem not providing the proper position-buffer
information, and it also doesn't provide FIFO register required by
VIACOMBO fix. It's better to use LPIB for these.
Reported-by: David Henningsson <david.henningsson at canonical.com>
Cc: <stable at kernel.org>
Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
sound/pci/hda/hda_intel.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 0c1996d..43a0367 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2367,9 +2367,16 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
/* Check VIA/ATI HD Audio Controller exist */
switch (chip->driver_type) {
case AZX_DRIVER_VIA:
- case AZX_DRIVER_ATI:
/* Use link position directly, avoid any transfer problem. */
return POS_FIX_VIACOMBO;
+ case AZX_DRIVER_ATI:
+ /* ATI chipsets don't work well with position-buffer */
+ return POS_FIX_LPIB;
+ case AZX_DRIVER_GENERIC:
+ /* AMD chipsets also don't work with position-buffer */
+ if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
+ return POS_FIX_LPIB;
+ break;
}
return POS_FIX_AUTO;
--
1.7.4.2
More information about the Alsa-devel
mailing list