On 5/16/19 8:21 PM, Kuninori Morimoto wrote:
From: Kuninori Morimoto kuninori.morimoto.gx@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@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;