Commit 3a906721 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/878s8un6si.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent fac110cb
...@@ -384,53 +384,23 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream, ...@@ -384,53 +384,23 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
soc_pcm_set_dai_params(&d, params); soc_pcm_set_dai_params(&d, params);
/* reject unmatched parameters when applying symmetry */ #define __soc_pcm_params_symmetry(name) \
symmetry = rtd->dai_link->symmetric_rate; symmetry = rtd->dai_link->symmetric_##name; \
for_each_rtd_dais(rtd, i, dai) \
for_each_rtd_cpu_dais(rtd, i, dai) symmetry |= dai->driver->symmetric_##name; \
symmetry |= dai->driver->symmetric_rate; \
if (symmetry) \
if (symmetry) { for_each_rtd_cpu_dais(rtd, i, cpu_dai) \
for_each_rtd_cpu_dais(rtd, i, cpu_dai) { if (cpu_dai->name && cpu_dai->name != d.name) { \
if (cpu_dai->rate && cpu_dai->rate != d.rate) { dev_err(rtd->dev, "ASoC: unmatched %s symmetry: %d - %d\n", \
dev_err(rtd->dev, "ASoC: unmatched rate symmetry: %d - %d\n", #name, cpu_dai->name, d.name); \
cpu_dai->rate, d.rate); return -EINVAL; \
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; /* reject unmatched parameters when applying symmetry */
__soc_pcm_params_symmetry(rate);
for_each_rtd_dais(rtd, i, dai) __soc_pcm_params_symmetry(channels);
symmetry |= dai->driver->symmetric_sample_bits; __soc_pcm_params_symmetry(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;
}
}
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment