[alsa-devel] [PATCH][RFC] ASoC: soc-dpm: fixup DAI active unbalance

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Fri May 17 05:21:31 CEST 2019



On 5/16/19 8:21 PM, Kuninori Morimoto wrote:
> 
> From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> 
> snd_soc_dai_link_event() is updating snd_soc_dai :: active,
> but it is unbalance.
> It counts up if it has startup callback.
> 
> 	case SND_SOC_DAPM_PRE_PMU:
> 		...
> 		snd_soc_dapm_widget_for_each_source_path(w, path) {
> 			...
> 			if (source->driver->ops->startup) {
> 				...
> =>				source->active++;
> 			}
> 			...
> 		}
> 		...
> 
> But, always counts down
> 
> 	case SND_SOC_DAPM_PRE_PMD:
> 		...
> 		snd_soc_dapm_widget_for_each_source_path(w, path) {
> 			...
> =>			source->active--;
> 			...
> 		}
> 
> This patch always counts up when SND_SOC_DAPM_PRE_PMD.
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
> Mark, Liam
> 
> I think this is bug, but I can't confirm it,
> because my driver need to have .startup.
> Thus, I added [RFC] on this patch.
> I'm happy if someone can confirm it.

This looks like a bug since the initial Intel contribution in 2015. 
9b8ef9f6b3fc ('ASoC: dapm: Add startup & shutdown for dai_links') 
already has this imbalance.

I don't have a clue why this is not symmetric or not done as suggested 
by Morimoto-san. Vinod, any idea?

> 
>   sound/soc/soc-dapm.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
> index c864502..147ad9d 100644
> --- a/sound/soc/soc-dapm.c
> +++ b/sound/soc/soc-dapm.c
> @@ -3828,8 +3828,8 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
>   						ret);
>   					goto out;
>   				}
> -				source->active++;
>   			}
> +			source->active++;
>   			ret = soc_dai_hw_params(&substream, params, source);
>   			if (ret < 0)
>   				goto out;
> @@ -3850,8 +3850,8 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
>   						ret);
>   					goto out;
>   				}
> -				sink->active++;
>   			}
> +			sink->active++;
>   			ret = soc_dai_hw_params(&substream, params, sink);
>   			if (ret < 0)
>   				goto out;
> 


More information about the Alsa-devel mailing list