[PATCH 02/17] ASoC: use snd_soc_dai/component_activity()
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Tue May 12 01:53:50 CEST 2020
Hi Ranjani
Thank you for reviewing
> > - if (!cpu_dai->active)
> > + if (!snd_soc_dai_activity(cpu_dai))
> I have a feeling this is probably incorrect. snd_soc_dai_activity()
> checks for stream_active count which is different from snd_soc_dai's
> active member, isnt it?
OK, let me check.
The original code is like this
static void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd,
int stream, int action)
{
...
for_each_rtd_dais(rtd, i, dai) {
dai->stream_active[stream] += action;
dai->active += action;
...
}
}
void snd_soc_runtime_activate(...)
{
snd_soc_runtime_action(rtd, stream, 1);
}
void snd_soc_runtime_deactivate(...)
{
snd_soc_runtime_action(rtd, stream, -1);
}
Basically, ASoC calls
snd_soc_runtime_activate() for activate count up, and,
snd_soc_runtime_deactivate() for activate count down.
I think snd_soc_dai_activity() is correct, *so far*.
Exceptions are
soc-dapm.c :: snd_soc_dai_link_event_pre_pmu()
soc-dapm.c :: snd_soc_dai_link_event()
snd_soc_dai_link_event_pre_pmu(...)
{
...
snd_soc_dapm_widget_for_each_source_path(w, path) {
...
source->active++;
}
...
snd_soc_dapm_widget_for_each_sink_path(w, path) {
...
sink->active++;
}
...
}
snd_soc_dai_link_event(...)
{
...
snd_soc_dapm_widget_for_each_source_path(w, path) {
...
source->active--;
...
}
snd_soc_dapm_widget_for_each_sink_path(w, path) {
...
sink->active--;
...
}
...
}
Only these directly access to dai->active, *without* thinking stream_active.
I think it should use snd_soc_runtime_activate() / snd_soc_runtime_deactivate().
My patch cares it... Oops !!
I thought my patch cares it, but not enough (= [02/17]).
Can you agree below ?
1) use runtime_activate()/deactivate() at above functions.
2) apply my original patches on top of 1)
then, update git-log to explain above
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list