On 6/29/2020 6:26 AM, Kuninori Morimoto wrote:
External email: Use caution opening links or attachments
Hi Sameer
simple-audio-card,dai-link@xxx { format = "i2s"; bitclock-master=<&cpu1>; frame-master=<&cpu1>;
cpu1: cpu@0 { ... };
codec@0 { ... };
... };
In above case CPU is expected to be configured as a master and Codec as a slave device. But both CPU/Codec are being configured as slave devices. This happens because asoc_simple_parse_daifmt() uses Codec reference and sets up the 'dai_link->dai_fmt' accordingly while parsing both CPU and Codec. I'm sorry but I don't 100% understand about this case... asoc_simple_parse_daifmt() should work in this case
The reason why it needs codec node is that SND_SOC_DAIFMT_CBx_CFx are "Codec" base Master/Slave.
Currently soc-core has following code snippet, /snd_soc_runtime_set_dai_fmt() {// // ...// // // if (cpu_dai->component->driver->non_legacy_dai_naming)// // fmt = inv_dai_fmt;// // // ...// // }/ Above flips polarity for 'cpu_dai' if 'non_legacy_dai_naming' flag is set. 1. Hence example mentioned in the commit message does not work if my 'cpu_dai' driver does not have this flag set. 2. While it is true that we consider reference of 'Codec' mode for simple CPU<->Codec DAI links, for DPCM this does not seem flexible. For DPCM links CPU and Codec are not directly connected (CPU<->Dummy or Dummy<->Codec). Please consider, for example, if the DAI link has multiple CPU/Codecs. Which 'Codec' reference needs to be considered? Isn't it better if we explicitly mention which DAI we want to operate as 'Master'?
Thank you for your help !!
Best regards --- Kuninori Morimoto