[alsa-devel] [PATCH] ALSA: hda - Fix calling cs_automic twice for Cirrus codecs.
Takashi Iwai
tiwai at suse.de
Wed Feb 1 09:45:32 CET 2012
At Tue, 31 Jan 2012 13:04:41 -0800,
Dylan Reid wrote:
>
> 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: Dylan Reid <dgreid at chromium.org>
Thanks, applied now.
Takashi
> ---
> sound/pci/hda/patch_cirrus.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
> index 0e99357..bc5a993 100644
> --- a/sound/pci/hda/patch_cirrus.c
> +++ b/sound/pci/hda/patch_cirrus.c
> @@ -988,8 +988,10 @@ static void cs_automic(struct hda_codec *codec)
> change_cur_input(codec, !spec->automic_idx, 0);
> } else {
> if (present) {
> - spec->last_input = spec->cur_input;
> - spec->cur_input = spec->automic_idx;
> + if (spec->cur_input != spec->automic_idx) {
> + spec->last_input = spec->cur_input;
> + spec->cur_input = spec->automic_idx;
> + }
> } else {
> spec->cur_input = spec->last_input;
> }
> --
> 1.7.9.rc0
>
More information about the Alsa-devel
mailing list