ALSA: hda - Fix input source elements of secondary ADCs on Realtek
Since alc_auto_create_input_ctls() doesn't set the elements for the secondary ADCs, "Input Source" elemtns for these also get empty, resulting in buggy outputs of alsactl like: control.14 { comment.access 'read write' comment.type ENUMERATED comment.count 1 iface MIXER name 'Input Source' index 1 value 0 } This patch fixes alc_mux_enum_*() (and others) to fall back to the first entry if the secondary input mux is empty. Signed-off-by: Takashi Iwai <tiwai@suse.de> Cc: <stable@kernel.org>
This commit is contained in:
parent
50ae0aa8f5
commit
5311114d48
1 changed files with 6 additions and 0 deletions
|
@ -411,6 +411,8 @@ static int alc_mux_enum_info(struct snd_kcontrol *kcontrol,
|
||||||
unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id);
|
unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id);
|
||||||
if (mux_idx >= spec->num_mux_defs)
|
if (mux_idx >= spec->num_mux_defs)
|
||||||
mux_idx = 0;
|
mux_idx = 0;
|
||||||
|
if (!spec->input_mux[mux_idx].num_items && mux_idx > 0)
|
||||||
|
mux_idx = 0;
|
||||||
return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo);
|
return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,6 +441,8 @@ static int alc_mux_enum_put(struct snd_kcontrol *kcontrol,
|
||||||
|
|
||||||
mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
|
mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
|
||||||
imux = &spec->input_mux[mux_idx];
|
imux = &spec->input_mux[mux_idx];
|
||||||
|
if (!imux->num_items && mux_idx > 0)
|
||||||
|
imux = &spec->input_mux[0];
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -10105,6 +10109,8 @@ static void alc882_auto_init_input_src(struct hda_codec *codec)
|
||||||
continue;
|
continue;
|
||||||
mux_idx = c >= spec->num_mux_defs ? 0 : c;
|
mux_idx = c >= spec->num_mux_defs ? 0 : c;
|
||||||
imux = &spec->input_mux[mux_idx];
|
imux = &spec->input_mux[mux_idx];
|
||||||
|
if (!imux->num_items && mux_idx > 0)
|
||||||
|
imux = &spec->input_mux[0];
|
||||||
for (idx = 0; idx < conns; idx++) {
|
for (idx = 0; idx < conns; idx++) {
|
||||||
/* if the current connection is the selected one,
|
/* if the current connection is the selected one,
|
||||||
* unmute it as default - otherwise mute it
|
* unmute it as default - otherwise mute it
|
||||||
|
|
Loading…
Add table
Reference in a new issue