aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/pci/hda/patch_realtek.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index d81cb5eb8c5..3666cc5dc3b 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -6924,18 +6924,21 @@ static void alc882_auto_init_analog_input(struct hda_codec *codec)
6924static void alc882_auto_init_input_src(struct hda_codec *codec) 6924static void alc882_auto_init_input_src(struct hda_codec *codec)
6925{ 6925{
6926 struct alc_spec *spec = codec->spec; 6926 struct alc_spec *spec = codec->spec;
6927 const struct hda_input_mux *imux = spec->input_mux;
6928 int c; 6927 int c;
6929 6928
6930 for (c = 0; c < spec->num_adc_nids; c++) { 6929 for (c = 0; c < spec->num_adc_nids; c++) {
6931 hda_nid_t conn_list[HDA_MAX_NUM_INPUTS]; 6930 hda_nid_t conn_list[HDA_MAX_NUM_INPUTS];
6932 hda_nid_t nid = spec->capsrc_nids[c]; 6931 hda_nid_t nid = spec->capsrc_nids[c];
6932 unsigned int mux_idx;
6933 const struct hda_input_mux *imux;
6933 int conns, mute, idx, item; 6934 int conns, mute, idx, item;
6934 6935
6935 conns = snd_hda_get_connections(codec, nid, conn_list, 6936 conns = snd_hda_get_connections(codec, nid, conn_list,
6936 ARRAY_SIZE(conn_list)); 6937 ARRAY_SIZE(conn_list));
6937 if (conns < 0) 6938 if (conns < 0)
6938 continue; 6939 continue;
6940 mux_idx = c >= spec->num_mux_defs ? 0 : c;
6941 imux = &spec->input_mux[mux_idx];
6939 for (idx = 0; idx < conns; idx++) { 6942 for (idx = 0; idx < conns; idx++) {
6940 /* if the current connection is the selected one, 6943 /* if the current connection is the selected one,
6941 * unmute it as default - otherwise mute it 6944 * unmute it as default - otherwise mute it
@@ -6948,8 +6951,20 @@ static void alc882_auto_init_input_src(struct hda_codec *codec)
6948 break; 6951 break;
6949 } 6952 }
6950 } 6953 }
6951 snd_hda_codec_write(codec, nid, 0, 6954 /* check if we have a selector or mixer
6952 AC_VERB_SET_AMP_GAIN_MUTE, mute); 6955 * we could check for the widget type instead, but
6956 * just check for Amp-In presence (in case of mixer
6957 * without amp-in there is something wrong, this
6958 * function shouldn't be used or capsrc nid is wrong)
6959 */
6960 if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP)
6961 snd_hda_codec_write(codec, nid, 0,
6962 AC_VERB_SET_AMP_GAIN_MUTE,
6963 mute);
6964 else if (mute != AMP_IN_MUTE(idx))
6965 snd_hda_codec_write(codec, nid, 0,
6966 AC_VERB_SET_CONNECT_SEL,
6967 idx);
6953 } 6968 }
6954 } 6969 }
6955} 6970}