mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
ASoC: soc-pcm: cleanup soc_pcm_params_symmetry()
soc_pcm_params_symmetry() checks rate/channel/sample_bits state. These are very similar but different, thus, it needs to have very verbose code. This patch use macro for it and make code more simple. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/878s8un6si.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
fac110cbcd
commit
3a90672111
@ -384,53 +384,23 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
|
||||
|
||||
soc_pcm_set_dai_params(&d, params);
|
||||
|
||||
#define __soc_pcm_params_symmetry(name) \
|
||||
symmetry = rtd->dai_link->symmetric_##name; \
|
||||
for_each_rtd_dais(rtd, i, dai) \
|
||||
symmetry |= dai->driver->symmetric_##name; \
|
||||
\
|
||||
if (symmetry) \
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) \
|
||||
if (cpu_dai->name && cpu_dai->name != d.name) { \
|
||||
dev_err(rtd->dev, "ASoC: unmatched %s symmetry: %d - %d\n", \
|
||||
#name, cpu_dai->name, d.name); \
|
||||
return -EINVAL; \
|
||||
}
|
||||
|
||||
/* reject unmatched parameters when applying symmetry */
|
||||
symmetry = rtd->dai_link->symmetric_rate;
|
||||
|
||||
for_each_rtd_cpu_dais(rtd, i, dai)
|
||||
symmetry |= dai->driver->symmetric_rate;
|
||||
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->rate && cpu_dai->rate != d.rate) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched rate symmetry: %d - %d\n",
|
||||
cpu_dai->rate, d.rate);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
symmetry = rtd->dai_link->symmetric_channels;
|
||||
|
||||
for_each_rtd_dais(rtd, i, dai)
|
||||
symmetry |= dai->driver->symmetric_channels;
|
||||
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->channels &&
|
||||
cpu_dai->channels != d.channels) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched channel symmetry: %d - %d\n",
|
||||
cpu_dai->channels, d.channels);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
symmetry = rtd->dai_link->symmetric_sample_bits;
|
||||
|
||||
for_each_rtd_dais(rtd, i, dai)
|
||||
symmetry |= dai->driver->symmetric_sample_bits;
|
||||
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->sample_bits &&
|
||||
cpu_dai->sample_bits != d.sample_bits) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched sample bits symmetry: %d - %d\n",
|
||||
cpu_dai->sample_bits, d.sample_bits);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
__soc_pcm_params_symmetry(rate);
|
||||
__soc_pcm_params_symmetry(channels);
|
||||
__soc_pcm_params_symmetry(sample_bits);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user