summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorLydia Wang <lydiawang@viatech.com.cn>2011-07-01 10:55:07 +0800
committerTakashi Iwai <tiwai@suse.de>2011-07-01 08:33:06 +0200
commite5e14681404ec27a422d635284bf564dabde3f81 (patch)
tree83f3be512a7745805051ae70cecf36cd6f9bb897 /sound
parent350434ee53f39adb5e73320be4c98010b87d3dbf (diff)
downloadlinux-3.10-e5e14681404ec27a422d635284bf564dabde3f81.tar.gz
linux-3.10-e5e14681404ec27a422d635284bf564dabde3f81.tar.bz2
linux-3.10-e5e14681404ec27a422d635284bf564dabde3f81.zip
ALSA: hda - Fix the silent front with independent-HP for VIA codecs
Unmute DAC on front speaker path when Independent HP is enabled. When to enable Independent HP, the front speaker won't output any sound for VT1708, VT1708B, VT1708S and VT1702. I find the via_independent_hp_put() routine will mute DAC 0 path in Mixer 0. For these codecs, when using Independent HP, there could have two independent streams, one is from DAC0-->Mixer0-->Front Pin, the other is from DAC3-->GainSW3-->Side Pin. So I added a check for DAC-->Mixer path in activate_output_path(). If current path is DAC-->Mixer, no need to mute DAC index in Mixer. In fact, to change connection of Headphone pin or Mux connected with HP is enough. Signed-off-by: Lydia Wang <lydiawang@viatech.com.cn> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_via.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 5ef14dd7a56..bbbc4f4cbf1 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -451,6 +451,9 @@ static void activate_output_path(struct hda_codec *codec, struct nid_path *path,
if (enable && path->multi[i])
snd_hda_codec_write(codec, dst, 0,
AC_VERB_SET_CONNECT_SEL, idx);
+ if (get_wcaps_type(get_wcaps(codec, src)) == AC_WID_AUD_OUT &&
+ get_wcaps_type(get_wcaps(codec, dst)) == AC_WID_AUD_MIX)
+ continue;
if (have_mute(codec, dst, HDA_INPUT)) {
int val = enable ? AMP_IN_UNMUTE(idx) :
AMP_IN_MUTE(idx);