
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