From f970de2555636c563935cdc2abc5684da2adacc4 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Wed, 6 Jul 2011 17:39:59 +0200
Subject: [PATCH] ALSA: hda - Unify alc*_auto_init_input_src() in patch_realtek.c
Git-commit: f970de2555636c563935cdc2abc5684da2adacc4
Patch-mainline: 3.1-rc2
Refernces: FATE#314106,FATE#314311,FATE#313695

The only different implmentation was alc880_auto_init_input_src(),
and now it covers this variant, and we can use the single function
for all codecs.

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

---
 sound/pci/hda/patch_realtek.c |   62 +++++++++++-------------------------------
 1 file changed, 17 insertions(+), 45 deletions(-)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5563,31 +5563,10 @@ static void alc_auto_init_analog_input(s
 	}
 }
 
-static void alc880_auto_init_input_src(struct hda_codec *codec)
-{
-	struct alc_spec *spec = codec->spec;
-	int c;
-
-	for (c = 0; c < spec->num_adc_nids; c++) {
-		unsigned int mux_idx;
-		const struct hda_input_mux *imux;
-		mux_idx = c >= spec->num_mux_defs ? 0 : c;
-		imux = &spec->input_mux[mux_idx];
-		if (!imux->num_items && mux_idx > 0)
-			imux = &spec->input_mux[0];
-		if (imux)
-			snd_hda_codec_write(codec, spec->adc_nids[c], 0,
-					    AC_VERB_SET_CONNECT_SEL,
-					    imux->items[0].index);
-		snd_hda_codec_write(codec, spec->adc_nids[c], 0,
-				    AC_VERB_SET_AMP_GAIN_MUTE,
-				    AMP_IN_MUTE(0));
-	}
-}
-
 static int alc_auto_add_multi_channel_mode(struct hda_codec *codec,
 					   int (*fill_dac)(struct hda_codec *));
 static void alc_remove_invalid_adc_nids(struct hda_codec *codec);
+static void alc_auto_init_input_src(struct hda_codec *codec);
 
 /* parse the BIOS configuration and set up the alc_spec */
 /* return 1 if successful, 0 if the proper config is not found,
@@ -5650,7 +5629,7 @@ static void alc880_auto_init(struct hda_
 	alc_auto_init_multi_out(codec);
 	alc_auto_init_extra_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc880_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -7166,8 +7145,6 @@ static void alc260_auto_init_multi_out(s
 		alc260_auto_set_output_and_unmute(codec, nid, PIN_HP, 0);
 }
 
-#define alc260_auto_init_input_src	alc880_auto_init_input_src
-
 static int alc260_parse_auto_config(struct hda_codec *codec)
 {
 	struct alc_spec *spec = codec->spec;
@@ -7211,7 +7188,7 @@ static void alc260_auto_init(struct hda_
 	struct alc_spec *spec = codec->spec;
 	alc260_auto_init_multi_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc260_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -10827,18 +10804,23 @@ static const struct snd_pci_quirk alc882
 /*
  * BIOS auto configuration
  */
-static void alc882_auto_init_input_src(struct hda_codec *codec)
+static void alc_auto_init_input_src(struct hda_codec *codec)
 {
 	struct alc_spec *spec = codec->spec;
 	int c;
 
+	if (spec->dual_adc_switch)
+		return;
+
 	for (c = 0; c < spec->num_adc_nids; c++) {
-		hda_nid_t nid = spec->capsrc_nids[c];
+		hda_nid_t nid;
 		unsigned int mux_idx;
 		const struct hda_input_mux *imux;
 		int conns, mute, idx, item;
 		unsigned int wid_type;
 
+		nid = spec->capsrc_nids ?
+			spec->capsrc_nids[c] : spec->adc_nids[c];
 		/* mute ADC */
 		if (query_amp_caps(codec, spec->adc_nids[c], HDA_INPUT) &
 		    AC_AMPCAP_MUTE)
@@ -10984,7 +10966,7 @@ static void alc882_auto_init(struct hda_
 	alc_auto_init_multi_out(codec);
 	alc_auto_init_extra_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc882_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -12315,8 +12297,6 @@ static int alc262_parse_auto_config(stru
 	return 1;
 }
 
-#define alc262_auto_init_input_src	alc882_auto_init_input_src
-
 
 /* init callback for auto-configuration model -- overriding the default init */
 static void alc262_auto_init(struct hda_codec *codec)
@@ -12325,7 +12305,7 @@ static void alc262_auto_init(struct hda_
 	alc_auto_init_multi_out(codec);
 	alc_auto_init_extra_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc262_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -13429,7 +13409,7 @@ static int alc268_parse_auto_config(stru
 		add_verb(spec, alc268_beep_init_verbs);
 	}
 
-	spec->num_mux_defs = 2;
+	spec->num_mux_defs = 1;
 	spec->input_mux = &spec->private_imux[0];
 
 	if (!spec->dual_adc_switch)
@@ -13444,8 +13424,6 @@ static int alc268_parse_auto_config(stru
 	return 1;
 }
 
-#define alc268_auto_init_input_src	alc882_auto_init_input_src
-
 /* init callback for auto-configuration model -- overriding the default init */
 static void alc268_auto_init(struct hda_codec *codec)
 {
@@ -13454,7 +13432,7 @@ static void alc268_auto_init(struct hda_
 	alc268_auto_init_hp_out(codec);
 	alc268_auto_init_mono_speaker_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc268_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -14391,7 +14369,6 @@ static int alc269_parse_auto_config(stru
 
 #define alc269_auto_init_multi_out	alc268_auto_init_multi_out
 #define alc269_auto_init_hp_out		alc268_auto_init_hp_out
-#define alc269_auto_init_input_src	alc882_auto_init_input_src
 
 
 /* init callback for auto-configuration model -- overriding the default init */
@@ -14401,8 +14378,7 @@ static void alc269_auto_init(struct hda_
 	alc269_auto_init_multi_out(codec);
 	alc269_auto_init_hp_out(codec);
 	alc_auto_init_analog_input(codec);
-	if (!spec->dual_adc_switch)
-		alc269_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -16625,8 +16601,6 @@ static const struct alc_config_preset al
 /*
  * BIOS auto configuration
  */
-#define alc861vd_auto_init_input_src	alc882_auto_init_input_src
-
 #define alc861vd_idx_to_mixer_vol(nid)		((nid) + 0x02)
 #define alc861vd_idx_to_mixer_switch(nid)	((nid) + 0x0c)
 
@@ -16814,7 +16788,7 @@ static void alc861vd_auto_init(struct hd
 	alc_auto_init_multi_out(codec);
 	alc_auto_init_extra_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc861vd_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
@@ -18708,8 +18682,6 @@ static void alc_auto_init_extra_out(stru
 					spec->multiout.extra_out_nid[0]);
 }
 
-#define alc662_auto_init_input_src	alc882_auto_init_input_src
-
 /*
  * multi-io helper
  */
@@ -18947,7 +18919,7 @@ static void alc662_auto_init(struct hda_
 	alc_auto_init_multi_out(codec);
 	alc_auto_init_extra_out(codec);
 	alc_auto_init_analog_input(codec);
-	alc662_auto_init_input_src(codec);
+	alc_auto_init_input_src(codec);
 	alc_auto_init_digital(codec);
 	if (spec->unsol_event)
 		alc_inithook(codec);
