Question about daifmt of legacy DT on simple-card
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Thu Jan 14 05:24:04 CET 2021
Hi ALSA SoC
Cc Jyri
For historical reason, simple-card supports legacy DT daifmt
settings. Then, I noticed one strange code.
-- simple-card-utils.c ---
asoc_simple_parse_daifmt(xxx)
{
(A) daifmt = snd_soc_of_parse_daifmt(...);
daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
if (!bitclkmaster && !framemaster) {
/*
* No dai-link level and master setting was not found from
* sound node level, revert back to legacy DT parsing and
* take the settings from codec node.
*/
(B) daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) |
(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
} ...
...
}
It rollbacks to legacy DT parsing at (B) if (A) didn't have
master settings.
Here, (B) re-try to get daifmt, and use "or" with (daifmt & ~CLOCK mask).
Why CLOCK mask ? and shouldn't it use mask when "or" ?
Otherwise FORMAT and INV part will be duplicated, I think.
for example
daifmt = (snd_soc_of_parse_daifmt() & SND_SOC_DAIFMT_CLOCK_MASK) |
(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK)
I think using snd_soc_of_parse_daifmt() only is very enough at (B),
but am I misunderstanding ??
The original code was from
b3ca11ff59bc5842b01f13421a17e6d9a8936784
("ASoC: simple-card: Move dai-link level properties away from dai subnodes")
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list