diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a24e068a021..308bb575bc0 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -284,7 +284,7 @@ static int alc_mux_select(struct hda_codec *codec, unsigned int adc_idx,  	struct alc_spec *spec = codec->spec;  	const struct hda_input_mux *imux;  	unsigned int mux_idx; -	int i, type; +	int i, type, num_conns;  	hda_nid_t nid;  	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,  		spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];  	/* 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;  	type = get_wcaps_type(get_wcaps(codec, nid));  	if (type == AC_WID_AUD_MIX) {  		/* Matrix-mixer style (e.g. ALC882) */ -		for (i = 0; i < imux->num_items; i++) { -			unsigned int v = (i == idx) ? 0 : HDA_AMP_MUTE; -			snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, -						 imux->items[i].index, +		int active = imux->items[idx].index; +		for (i = 0; i < num_conns; i++) { +			unsigned int v = (i == active) ? 0 : HDA_AMP_MUTE; +			snd_hda_codec_amp_stereo(codec, nid, HDA_INPUT, i,  						 HDA_AMP_MUTE, v);  		}  	} else {  |