[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