[alsa-devel] [PATCH] ALSA: hda - fix broken HDMI jack detection after S3

David Henningsson david.henningsson at canonical.com
Wed Aug 22 19:00:32 CEST 2012


On 08/22/2012 04:49 PM, Takashi Iwai wrote:
> From: Takashi Iwai <tiwai at suse.de>
> Subject: [PATCH] ALSA: hda - Call snd_hda_jack_report_sync() generically in hda_codec.c
>
> Instead of calling the jack sync in the init callback of each codec,
> call it generically at initialization and resume.  By calling it at
> the last of resume sequence, a possible race between the jack sync and
> the unsol event enablement in the current code will be closed, too.
>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>

Acked-by: David Henningsson <david.henningsson at canonical.com>

> ---
>   sound/pci/hda/hda_codec.c      | 2 ++
>   sound/pci/hda/patch_cirrus.c   | 2 --
>   sound/pci/hda/patch_conexant.c | 1 -
>   sound/pci/hda/patch_hdmi.c     | 2 --
>   sound/pci/hda/patch_realtek.c  | 2 --
>   sound/pci/hda/patch_sigmatel.c | 2 --
>   sound/pci/hda/patch_via.c      | 1 -
>   7 files changed, 2 insertions(+), 10 deletions(-)
>
> diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> index a6c34dc..4efd271 100644
> --- a/sound/pci/hda/hda_codec.c
> +++ b/sound/pci/hda/hda_codec.c
> @@ -3618,6 +3618,7 @@ static void hda_call_codec_resume(struct hda_codec *codec)
>   		snd_hda_codec_resume_amp(codec);
>   		snd_hda_codec_resume_cache(codec);
>   	}
> +	snd_hda_jack_report_sync(codec);
>   	snd_hda_power_down(codec); /* flag down before returning */
>   }
>   #endif /* CONFIG_PM */
> @@ -3663,6 +3664,7 @@ int snd_hda_codec_build_controls(struct hda_codec *codec)
>   		err = codec->patch_ops.build_controls(codec);
>   	if (err < 0)
>   		return err;
> +	snd_hda_jack_report_sync(codec); /* call at the last init point */
>   	return 0;
>   }
>
> diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
> index 0c4c1a6..0bddb3e 100644
> --- a/sound/pci/hda/patch_cirrus.c
> +++ b/sound/pci/hda/patch_cirrus.c
> @@ -1193,7 +1193,6 @@ static int cs_init(struct hda_codec *codec)
>   	init_output(codec);
>   	init_input(codec);
>   	init_digital(codec);
> -	snd_hda_jack_report_sync(codec);
>
>   	return 0;
>   }
> @@ -1643,7 +1642,6 @@ static int cs421x_init(struct hda_codec *codec)
>   	init_output(codec);
>   	init_input(codec);
>   	init_cs421x_digital(codec);
> -	snd_hda_jack_report_sync(codec);
>
>   	return 0;
>   }
> diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
> index 5e22a8f..172895a 100644
> --- a/sound/pci/hda/patch_conexant.c
> +++ b/sound/pci/hda/patch_conexant.c
> @@ -4061,7 +4061,6 @@ static int cx_auto_init(struct hda_codec *codec)
>   	cx_auto_init_output(codec);
>   	cx_auto_init_input(codec);
>   	cx_auto_init_digital(codec);
> -	snd_hda_jack_report_sync(codec);
>   	snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
>   	return 0;
>   }
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index 8f23374..d9439c5 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -1311,7 +1311,6 @@ static int generic_hdmi_init(struct hda_codec *codec)
>   		hdmi_init_pin(codec, pin_nid);
>   		snd_hda_jack_detect_enable(codec, pin_nid, pin_nid);
>   	}
> -	snd_hda_jack_report_sync(codec);
>   	return 0;
>   }
>
> @@ -1428,7 +1427,6 @@ static int simple_playback_init(struct hda_codec *codec)
>   		snd_hda_codec_write(codec, pin, 0, AC_VERB_SET_AMP_GAIN_MUTE,
>   				    AMP_OUT_UNMUTE);
>   	snd_hda_jack_detect_enable(codec, pin, pin);
> -	snd_hda_jack_report_sync(codec);
>   	return 0;
>   }
>
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 4f81dd4..ce99cc9 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -2053,8 +2053,6 @@ static int alc_init(struct hda_codec *codec)
>
>   	alc_apply_fixup(codec, ALC_FIXUP_ACT_INIT);
>
> -	snd_hda_jack_report_sync(codec);
> -
>   	hda_call_check_power_status(codec, 0x01);
>   	return 0;
>   }
> diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
> index ea5775a..4352954 100644
> --- a/sound/pci/hda/patch_sigmatel.c
> +++ b/sound/pci/hda/patch_sigmatel.c
> @@ -4418,8 +4418,6 @@ static int stac92xx_init(struct hda_codec *codec)
>   		stac_toggle_power_map(codec, nid, 0);
>   	}
>
> -	snd_hda_jack_report_sync(codec);
> -
>   	/* sync mute LED */
>   	if (spec->gpio_led) {
>   		if (spec->vmaster_mute.hook)
> diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
> index 4307717..4b0796b 100644
> --- a/sound/pci/hda/patch_via.c
> +++ b/sound/pci/hda/patch_via.c
> @@ -2815,7 +2815,6 @@ static int via_init(struct hda_codec *codec)
>
>   	via_hp_automute(codec);
>   	vt1708_update_hp_work(spec);
> -	snd_hda_jack_report_sync(codec);
>
>   	return 0;
>   }
>



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic


More information about the Alsa-devel mailing list