From: Takashi Iwai <tiwai@suse.de>
Date: Fri, 20 May 2011 14:29:09 +0000 (+0200)
Subject: ALSA: hda - Use LPIB for ATI/AMD chipsets as default
X-Git-Tag: firefly_0821_release~7613^2~1041^2~12^2
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=50e3bbf9898840eead86f90a43b3625a2b2f4112;p=firefly-linux-kernel-4.4.55.git

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@canonical.com>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 0c1996dd137b..43a036716d25 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;