[alsa-devel] [PATCH 0/7][RFC] ASoC: modern style CPU
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Thu Apr 18 04:28:54 CEST 2019
Hi Mark, Pierre-Louis
> > I think you're right to want a shorter name but Pierre's probably right
> > that that particular name isn't the best... I'm thinking it might be
> > good to look at the fully expanded definitions and then work back from
> > there, or perhaps just stick with them for a while (since the compact
> > forms are hopefully not a requirement for legibility, even if they are a
> > useful improvement).
These are proposal of modern style macro v2.
Any opinions are welcome.
v1 -> v2
- Naming fixup
- No difference between with / without Platform
(= no more xx_CC and xx_CCP)
- It can handle each CPU/Codec/Platform manually (if you want)
/* Macro */
#define SND_DAILINK_REG(cpu, codec, platform) \
.cpus = cpu, \
.num_cpus = ARRAY_SIZE(cpu), \
.codecs = codec, \
.num_codecs = ARRAY_SIZE(codec), \
.platforms = platform, \
.num_platforms = ARRAY_SIZE(platform)
#define SND_DAILINK_REGS(name) \
.cpus = name##_cpus, \
.num_cpus = ARRAY_SIZE(name##_cpus), \
.codecs = name##_codecs, \
.num_codecs = ARRAY_SIZE(name##_codecs), \
.platforms = name##_platforms, \
.num_platforms = ARRAY_SIZE(name##_platforms)
#define SND_DAILINK_DEF(name, def...) \
static struct snd_soc_dai_link_component name[] = def
#define SND_DAILINK_DEFS(name, cpu, codec, platform) \
SND_DAILINK_DEF(name##_cpus, cpu); \
SND_DAILINK_DEF(name##_codecs, codec); \
SND_DAILINK_DEF(name##_platforms, platform)
#define DAILINK_COMPONENT_ARRAY(param...) { param }
#define CPU_COMPONENT(_dai) { .dai_name = _dai, }
#define CODEC_COMPONENT(_name, _dai) { .name = _name, .dai_name = _dai, }
#define PLATFORM_COMPONENT(_name) { .name = _name }
#define NO_DAILINK_COMPONENT() { }
struct snd_soc_dai_link_component null_dailink_component[0];
/* Sample1. Single CPU/Codec/Platform */
SND_DAILINK_DEFS(test,
DAILINK_COMPONENT_ARRAY(CPU_COMPONENT("cpu_dai")),
DAILINK_COMPONENT_ARRAY(CODEC_COMPONENT("codec", "codec_dai")),
DAILINK_COMPONENT_ARRAY(PLATFORM_COMPONENT("platform")));
struct snd_soc_dai_link link = {
...
SND_DAILINK_REGS(test),
};
/* Sample2. Multi CPU/Codec, No Platform */
SND_DAILINK_DEFS(test,
DAILINK_COMPONENT_ARRAY(CPU_COMPONENT("cpu_dai1"),
CPU_COMPONENT("cpu_dai2")),
DAILINK_COMPONENT_ARRAY(CODEC_COMPONENT("codec1", "codec_dai1"),
CODEC_COMPONENT("codec2", "codec_dai2")),
NO_DAILINK_COMPONENT());
struct snd_soc_dai_link link = {
...
SND_DAILINK_REGS(test),
};
/* Sample3. Define each CPU/Codec/Platform manually */
SND_DAILINK_DEF(test_cpu,
DAILINK_COMPONENT_ARRAY(CPU_COMPONENT("cpu_dai1"),
CPU_COMPONENT("cpu_dai2")));
SND_DAILINK_DEF(test_codec,
DAILINK_COMPONENT_ARRAY(CODEC_COMPONENT("codec1", "codec_dai1"),
CODEC_COMPONENT("codec2", "codec_dai2")));
SND_DAILINK_DEF(test_platform,
DAILINK_COMPONENT_ARRAY(PLATFORM_COMPONENT("platform")));
struct snd_soc_dai_link link = {
...
SND_DAILINK_REG(test_cpu,
test_codec,
test_platform),
};
/* Sample4. Sample3 + no platform */
struct snd_soc_dai_link link = {
...
SND_DAILINK_REG(test_cpu,
test_codec,
null_dailink_component),
};
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list