Thread (5 messages) 5 messages, 2 authors, 2021-09-30

Re: [PATCH 01/13] ASoC: soc-pcm: Don't reconnect an already active BE

From: Pierre-Louis Bossart <hidden>
Date: 2021-09-30 16:14:00
Also in: alsa-devel, linux-arm-kernel, linux-tegra, lkml

Possibly related (same subject, not in this thread)

quoted
quoted
quoted
Can you describe the sequence that you used to start them? That may be
useful to understand the criteria you used?
I have something like this:

FE1  --> Crossbar -> Mixer Input1    |
FE2  --> Crossbar -> Mixer Input2    |
...                                  | --> Mixer Output -->
... |
FE10 --> Crossbar -> Mixer Input10   |

All these FEs are started one after the other. This is an example of
10x1. Similarly we can have 2x1, 3x1 etc.,
In our system, the crossbar [0] and mixer [1] are separate ASoC
components. Basically audio paths consist of a group of ASoC components
which are connected back to back.
Not following. Can you explain how starting FE1 does not change the
state of the mixer output then?

Or is each 'Crossbar' instance a full-blown BE? In that case you have a
1:1 mapping between FE and BE, a *really* simple topology...
Yes 'Crossbar' exposes multiple ports and it is 1:1 mapping with FE.
Starting FE1 does configure mixer output.
Ah ok, now I get the difference with the N:1 topology we used.
Thanks for explaining this.
quoted
quoted
In the interim, may be we can have following patch to keep both systems
working and keep the discussion going to address the oustanding
requirements/issues?
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index ab25f99..0fbab50 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -1395,7 +1395,13 @@ static int dpcm_add_paths(struct
snd_soc_pcm_runtime *fe, int stream,
                 if (!fe->dpcm[stream].runtime && !fe->fe_compr)
                         continue;

-               if ((be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_NEW) &&
+               /*
+                * Filter for systems with 'component_chaining' enabled.
+                * This helps to avoid unnecessary re-configuration
of an
+                * already active BE on such systems.
+                */
+               if (fe->card->component_chaining &&
+                   (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_NEW) &&
                     (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_CLOSE))
                         continue;
that wouldn't work. We need to support the STOP and START cases as well.
I meant with flag 'fe->card->component_chaining', which is currently
used by Tegra audio only.
Ah yes, this may be a temporary solution that gets us both back to a
'working solution'. Let me give it a try.
Good discussion, thanks!
-Pierre
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help