Commit dccc1810 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Mute unused capture sources for Realtek codecs

When a Realtek codec has a matrix-style capture-source selection, we
need to scan all connections instead of only imux items.  Otherwise some
input might be kept unmuted.  Although the corresponding input must be
dead so there should be no input from it, it's still safer to mute the
route completely.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 5a9a5179
...@@ -284,7 +284,7 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx, ...@@ -284,7 +284,7 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx,
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
const struct hda_input_mux *imux; const struct hda_input_mux *imux;
unsigned int mux_idx; unsigned int mux_idx;
int i, type; int i, type, num_conns;
hda_nid_t nid; hda_nid_t nid;
mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
...@@ -307,16 +307,17 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx, ...@@ -307,16 +307,17 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx,
spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx]; spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];
/* no selection? */ /* no selection? */
if (snd_hda_get_conn_list(codec, nid, NULL) <= 1) num_conns = snd_hda_get_conn_list(codec, nid, NULL);
if (num_conns <= 1)
return 1; return 1;
type = get_wcaps_type(get_wcaps(codec, nid)); type = get_wcaps_type(get_wcaps(codec, nid));
if (type == AC_WID_AUD_MIX) { if (type == AC_WID_AUD_MIX) {
/* Matrix-mixer style (e.g. ALC882) */ /* Matrix-mixer style (e.g. ALC882) */
for (i = 0; i < imux->num_items; i++) { int active = imux->items[idx].index;
unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE; for (i = 0; i < num_conns; i++) {
snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, unsigned int v = (i == active) ? 0 : HDA_AMP_MUTE;
imux->items[i].index, snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, i,
HDA_AMP_MUTE, v); HDA_AMP_MUTE, v);
} }
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment