From 140547ef4ee9ad5f9ee9e6546f6027e8737c4149 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Thu, 16 Feb 2012 17:23:46 +0100
Subject: [PATCH] ALSA: hda/realtek - Improve the signel-connection check
Git-commit: 140547ef4ee9ad5f9ee9e6546f6027e8737c4149
Patch-mainline: 3.4-rc3

When the connections from the pin selector contain only two
widgets, a route to DAC and the aa-mixer, it's certainly a
single connection.  In such a case, get_dac_if_single() should
return the connected DAC, too.

This will improve the detection of the individual DAC
assignment for each pin.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

---
 sound/pci/hda/patch_realtek.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -2975,8 +2975,12 @@ static bool alc_auto_is_dac_reachable(st
 
 static hda_nid_t get_dac_if_single(struct hda_codec *codec, hda_nid_t pin)
 {
+	struct alc_spec *spec = codec->spec;
 	hda_nid_t sel = alc_go_down_to_selector(codec, pin);
-	if (snd_hda_get_conn_list(codec, sel, NULL) == 1)
+	hda_nid_t srcs[5];
+	int num = snd_hda_get_connections(codec, sel, srcs,
+					  ARRAY_SIZE(srcs));
+	if (num == 1 || (num == 2 && srcs[1] == spec->mixer_nid))
 		return alc_auto_look_for_dac(codec, pin);
 	return 0;
 }
