ALSA: hda/realtek - Fix missing inits of item indices for auto-mic
When the imux entries are rebuilt in alc_rebuild_imux_for_auto_mic(), the initialization of index field is missing. It may work without it casually when the original imux was created by the auto-parser, but it's definitely broken in the case of static configs where no imux was parsed beforehand. Because of this, the auto-mic switching doesn't work properly on some model options. This patch adds the missing initialization of index field. Reported-by: Dmitry Nezhevenko <dion@inhex.net> Cc: <stable@kernel.org> [v3.1] Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
6dfeb703e3
commit
6759dc3238
|
@ -1054,9 +1054,21 @@ static bool alc_rebuild_imux_for_auto_mic(struct hda_codec *codec)
|
||||||
spec->imux_pins[2] = spec->dock_mic_pin;
|
spec->imux_pins[2] = spec->dock_mic_pin;
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
strcpy(imux->items[i].label, texts[i]);
|
strcpy(imux->items[i].label, texts[i]);
|
||||||
if (spec->imux_pins[i])
|
if (spec->imux_pins[i]) {
|
||||||
|
hda_nid_t pin = spec->imux_pins[i];
|
||||||
|
int c;
|
||||||
|
for (c = 0; c < spec->num_adc_nids; c++) {
|
||||||
|
hda_nid_t cap = spec->capsrc_nids ?
|
||||||
|
spec->capsrc_nids[c] : spec->adc_nids[c];
|
||||||
|
int idx = get_connection_index(codec, cap, pin);
|
||||||
|
if (idx >= 0) {
|
||||||
|
imux->items[i].index = idx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
imux->num_items = i + 1;
|
imux->num_items = i + 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
spec->num_mux_defs = 1;
|
spec->num_mux_defs = 1;
|
||||||
spec->input_mux = imux;
|
spec->input_mux = imux;
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue