Hi Mark
I want to add new audio-graph-card2 sound card driver, and this is last part of necessary soc-core cleanup for it.
Current some drivers are using DT, and Then, snd_soc_of_parse_daifmt() parses daifmt, but bitclock/frame provider parsing part is one of headache, because we are assuming below both cases.
A) node { bitclock-master; frame-master; ... };
B) link { bitclock-master = <&xxx>; frame-master = <&xxx>; ... };
The original was style A), and style B) was added later.
snd_soc_of_parse_daifmt() parses A) style as original style, and user need to update to B) style for clock_provider part if needed. In such case, user need to re-parse it, like below.
daifmt = snd_soc_of_parse_daifmt(..., &bitclkmaster, &framemaster); daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
if (codec == bitclkmaster) daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS; else daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS;
This patch-set adds new functions, and handle these more simply. Unfortunately, there are too many use-case, do it by 1 function was implessible.
style A) bit_frame = snd_soc_daifmt_parse_clock_provider(); daifmt = snd_soc_daifmt_parse_format(...) | /* format part */ snd_soc_daifmt_clock_provider_pickup(bit_frame); /* clock part */
style B) snd_soc_daifmt_parse_clock_provider(..., &bit, &frame); daifmt = snd_soc_daifmt_parse_format(...) | /* format part */ snd_soc_daifmt_clock_provider_pickup( /* clock part */ ((codec == bit) << 4) + (codec == frame));
Kuninori Morimoto (9): ASoC: soc-core: don't use discriminatory terms on snd_soc_runtime_get_dai_fmt() ASoC: soc-core: add snd_soc_daifmt_clock_provider_pickup() ASoC: soc-core: add snd_soc_daifmt_clock_provider_fliped() ASoC: soc-core: add snd_soc_daifmt_parse_format/clock_provider() ASoC: atmel: switch to use snd_soc_daifmt_parse_format/clock_provider() ASoC: fsl: switch to use snd_soc_daifmt_parse_format/clock_provider() ASoC: meson: switch to use snd_soc_daifmt_parse_format/clock_provider() ASoC: simple-card-utils: switch to use snd_soc_daifmt_parse_format/clock_provider() ASoC: soc-core: remove snd_soc_of_parse_daifmt()
include/sound/soc.h | 13 +++- sound/soc/atmel/mikroe-proto.c | 18 ++--- sound/soc/fsl/fsl-asoc-card.c | 16 +--- sound/soc/generic/simple-card-utils.c | 19 ++--- sound/soc/meson/meson-card-utils.c | 15 ++-- sound/soc/soc-core.c | 103 ++++++++++++++++---------- 6 files changed, 99 insertions(+), 85 deletions(-)