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.
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