Re: [PATCH 1/3] ASoC: soc-generic-dmaengine-pcm: add option to start DMA after DAI

From: Lars-Peter Clausen
Date: Thu Feb 16 2023 - 08:53:58 EST


On 2/16/23 01:49, Claudiu.Beznea@xxxxxxxxxxxxx wrote:
On 14.02.2023 23:26, Mark Brown wrote:
On Tue, Feb 14, 2023 at 10:14:28AM -0800, Lars-Peter Clausen wrote:
On 2/14/23 08:14, Claudiu Beznea wrote:
@@ -450,6 +450,8 @@ int snd_dmaengine_pcm_register(struct device *dev,
else
driver = &dmaengine_pcm_component;
+ driver->start_dma_last = config->start_dma_last;
This will break if you have multiple sound cards in the system.
dmaengine_pcm_component must stay const.
Right, if we need to modify it we either need to select which of
multiple const structs to register or to take a copy and modify
that. I've not looked at the actual changes yet.
OK, I will try that and return with a new patch.

On the other hand do you think the other solution presented in cover letter
would be better? From the cover letter:

"The other solution that was identified for this was to extend the already
existing mechanism around struct snd_soc_dai_link::stop_dma_first. The downside
of this was that a potential struct snd_soc_dai_link::start_dma_last
would have to be populated on sound card driver thus, had to be taken
into account in all sound card drivers. At the moment, the mchp-pdmc is
used only with simple-audio-card. In case of simple-audio-card a new DT
binding would had to be introduced to specify this action on dai-link
descriptions (as of my investigation)."

Can't you just set `start_dma_last` on the `mchp_pdmc_dai_component`? In your code you iterate over all the components of the link and if any of them has it set the DMA is started last.