]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ASoC: soc-pcm: cleanup soc_pcm_params_symmetry()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 15 Jan 2021 04:56:39 +0000 (13:56 +0900)
committerMark Brown <broonie@kernel.org>
Thu, 21 Jan 2021 12:38:22 +0000 (12:38 +0000)
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>
sound/soc/soc-pcm.c

index 57341a0fd67c4088d8723e233e740cf9c8043a78..7079a301ec31d3c8aac92fa2ac85eaa710aa62d0 100644 (file)
@@ -384,53 +384,23 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
 
        soc_pcm_set_dai_params(&d, params);
 
-       /* 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;
+#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;                         \
                        }
-               }
-       }
 
-       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;
-                       }
-               }
-       }
+       /* reject unmatched parameters when applying symmetry */
+       __soc_pcm_params_symmetry(rate);
+       __soc_pcm_params_symmetry(channels);
+       __soc_pcm_params_symmetry(sample_bits);
 
        return 0;
 }