From 6e969d9155a4ee7bce800dfbee02099105ca5b97 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Mon, 11 Jul 2011 11:28:13 +0200
Subject: [PATCH] ALSA: hda - Set line-out pin-ctls properly when indep-HP mode
 changes

When Independent-HP mode is changed for VIA, the driver needs to
re-issue the auto-mute check so that the line-out pins are set properly
without influence of HP pin state.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_via.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index be2e57b44507..27de53fb331e 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -615,6 +615,7 @@ static void via_auto_init_speaker_out(struct hda_codec *codec)
 }
 
 static bool is_smart51_pins(struct hda_codec *codec, hda_nid_t pin);
+static void via_hp_automute(struct hda_codec *codec);
 
 static void via_auto_init_analog_input(struct hda_codec *codec)
 {
@@ -801,6 +802,7 @@ static int via_independent_hp_put(struct snd_kcontrol *kcontrol,
 
 	/* update jack power state */
 	set_widgets_power_state(codec);
+	via_hp_automute(codec);
 	return 1;
 }
 
@@ -1532,19 +1534,18 @@ static void via_line_automute(struct hda_codec *codec, int present)
 static void via_hp_automute(struct hda_codec *codec)
 {
 	int present = 0;
+	int nums;
 	struct via_spec *spec = codec->spec;
 
-	if (!spec->hp_independent_mode && spec->autocfg.hp_pins[0]) {
-		int nums;
+	if (!spec->hp_independent_mode && spec->autocfg.hp_pins[0])
 		present = snd_hda_jack_detect(codec, spec->autocfg.hp_pins[0]);
-		if (spec->smart51_enabled)
-			nums = spec->autocfg.line_outs + spec->smart51_nums;
-		else
-			nums = spec->autocfg.line_outs;
-		toggle_output_mutes(codec, nums,
-				    spec->autocfg.line_out_pins,
-				    present);
-	}
+
+	if (spec->smart51_enabled)
+		nums = spec->autocfg.line_outs + spec->smart51_nums;
+	else
+		nums = spec->autocfg.line_outs;
+	toggle_output_mutes(codec, nums, spec->autocfg.line_out_pins, present);
+
 	via_line_automute(codec, present);
 }
 
-- 
2.20.1