[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <09bbf14a-a5a0-23c6-d557-66a3af1ac227@linux.intel.com>
Date: Thu, 30 Sep 2021 11:13:45 -0500
From: Pierre-Louis Bossart <pierre-louis.bossart@...ux.intel.com>
To: Sameer Pujar <spujar@...dia.com>,
Péter Ujfalusi <peter.ujfalusi@...ux.intel.com>,
broonie@...nel.org, lgirdwood@...il.com, robh+dt@...nel.org,
thierry.reding@...il.com, jonathanh@...dia.com,
catalin.marinas@....com, will@...nel.org, perex@...ex.cz,
tiwai@...e.com, kuninori.morimoto.gx@...esas.com
Cc: devicetree@...r.kernel.org, alsa-devel@...a-project.org,
linux-kernel@...r.kernel.org, linux-tegra@...r.kernel.org,
sharadg@...dia.com, linux-arm-kernel@...ts.infradead.org
Subject: Re: [PATCH 01/13] ASoC: soc-pcm: Don't reconnect an already active BE
>>>> 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
Powered by blists - more mailing lists