ALSA: hda - Force to initialize input mixer setup for CS420x

Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index 051302e..8e33214 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -572,12 +572,13 @@
 	HDA_BIND_VOL("Capture Volume", 0),
 };
 
-static int change_cur_input(struct hda_codec *codec, unsigned int idx)
+static int change_cur_input(struct hda_codec *codec, unsigned int idx,
+			    int force)
 {
 	struct cs_spec *spec = codec->spec;
 	struct auto_pin_cfg *cfg = &spec->autocfg;
 	
-	if (spec->cur_input == idx)
+	if (spec->cur_input == idx && !force)
 		return 0;
 	if (spec->cur_adc && spec->cur_adc != spec->adc_nid[idx]) {
 		/* stream is running, let's swap the current ADC */
@@ -630,7 +631,7 @@
 	if (idx >= spec->num_inputs)
 		return -EINVAL;
 	idx = spec->input_idx[idx];
-	return change_cur_input(codec, idx);
+	return change_cur_input(codec, idx, 0);
 }
 
 static struct snd_kcontrol_new cs_capture_source = {
@@ -773,11 +774,11 @@
 	present = snd_hda_codec_read(codec, nid, 0,
 				     AC_VERB_GET_PIN_SENSE, 0);
 	if (present & AC_PINSENSE_PRESENCE)
-		change_cur_input(codec, spec->automic_idx);
+		change_cur_input(codec, spec->automic_idx, 0);
 	else {
 		unsigned int imic = (spec->automic_idx == AUTO_PIN_MIC) ?
 			AUTO_PIN_FRONT_MIC : AUTO_PIN_MIC;
-		change_cur_input(codec, imic);
+		change_cur_input(codec, imic, 0);
 	}
 }
 
@@ -857,6 +858,7 @@
 					    AC_VERB_SET_UNSOLICITED_ENABLE,
 					    AC_USRSP_EN | MIC_EVENT);
 	}
+	change_cur_input(codec, spec->cur_input, 1);
 	if (spec->mic_detect)
 		cs_automic(codec);
 }