ALSA: hda - Fix the silent front with independent-HP for VIA codecs
authorLydia Wang <lydiawang@viatech.com.cn>
Fri, 1 Jul 2011 02:55:07 +0000 (10:55 +0800)
committerTakashi Iwai <tiwai@suse.de>
Fri, 1 Jul 2011 06:33:06 +0000 (08:33 +0200)
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>
sound/pci/hda/patch_via.c

index 5ef14dd7a568cc476ca0dded68ca0f78280f6010..bbbc4f4cbf1a7a78c8a9b561989132753d94ab6e 100644 (file)
@@ -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);