Commit f70eecde authored by Dylan Reid's avatar Dylan Reid Committed by Takashi Iwai

ALSA: hda - Fix calling cs_automic twice for Cirrus codecs.

If cs_automic is called twice (like it is during init) while the mic
is present, it will over-write the last_input with the new one,
causing it to switch back to the automic input when the mic is
unplugged. This leaves the driver in a state (cur_input, last_input,
and automix_idx the same) where the internal mic can not be selected
until it is rebooted without the mic attached.

Check that the mic hasn't already been switched to before setting
last_input.
Signed-off-by: default avatarDylan Reid <dgreid@chromium.org>
Cc: <stable@kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent ea51e504
...@@ -988,8 +988,10 @@ static void cs_automic(struct hda_codec *codec) ...@@ -988,8 +988,10 @@ static void cs_automic(struct hda_codec *codec)
change_cur_input(codec, !spec->automic_idx, 0); change_cur_input(codec, !spec->automic_idx, 0);
} else { } else {
if (present) { if (present) {
spec->last_input = spec->cur_input; if (spec->cur_input != spec->automic_idx) {
spec->cur_input = spec->automic_idx; spec->last_input = spec->cur_input;
spec->cur_input = spec->automic_idx;
}
} else { } else {
spec->cur_input = spec->last_input; spec->cur_input = spec->last_input;
} }
......
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