[alsa-devel] [PATCH] ASoC: Suppress early calls to snd_soc_dapm_sync()

Péter Ujfalusi peter.ujfalusi at ti.com
Fri Oct 7 16:18:19 CEST 2011


On Friday 07 October 2011 14:34:02 Mark Brown wrote:
> Ensure we only have one sync during the initial startup of the card by
> making snd_soc_dapm_sync() a noop on non-instantiated cards. This avoids
> any bounces due to things like jacks reporting their initial state on
> partially initialised cards. The callers that don't also get called at
> runtime should just be removed.
> 
> Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
> ---
>  sound/soc/soc-core.c |    1 +
>  sound/soc/soc-dapm.c |    7 +++++++
>  2 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index 2a25076..b65e3d4 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -1498,6 +1498,7 @@ static void snd_soc_instantiate_card(struct
> snd_soc_card *card) #endif
> 
>  	card->instantiated = 1;
> +	snd_soc_dapm_sync(&card->dapm);

Without prior snd_soc_dapm_new_widgets() call we just moved the kernel crash
here.

>  	mutex_unlock(&card->mutex);
>  	return;
> 
> diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
> index 8711aab..e49c56d 100644
> --- a/sound/soc/soc-dapm.c
> +++ b/sound/soc/soc-dapm.c
> @@ -1845,6 +1845,13 @@ static int snd_soc_dapm_set_pin(struct
> snd_soc_dapm_context *dapm, */
>  int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm)
>  {
> +	/*
> +	 * Suppress early reports (eg, jacks syncing their state) to avoid
> +	 * silly DAPM runs during card startup.
> +	 */
> +	if (!dapm->card || !dapm->card->instantiated)
> +		return 0;
> +
>  	return dapm_power_widgets(dapm, SND_SOC_DAPM_STREAM_NOP);
>  }
>  EXPORT_SYMBOL_GPL(snd_soc_dapm_sync);

--
Péter


More information about the Alsa-devel mailing list