]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ASoC: soc-pcm: cleanup soc_pcm_apply_symmetry()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 15 Jan 2021 04:56:35 +0000 (13:56 +0900)
committerMark Brown <broonie@kernel.org>
Thu, 21 Jan 2021 12:38:21 +0000 (12:38 +0000)
soc_pcm_apply_symmetry() want to call snd_pcm_hw_constraint_single()
for rate/channel/sample_bits, but, it needs many condition checks.
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/87a6tan6sm.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-pcm.c

index 1a5d0cb3dc69795989b87c3a9bbbca25c0114caf..57341a0fd67c4088d8723e233e740cf9c8043a78 100644 (file)
@@ -349,53 +349,26 @@ static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        int ret;
 
-       if (soc_dai->rate && (soc_dai->driver->symmetric_rate ||
-                               rtd->dai_link->symmetric_rate)) {
-               dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %dHz rate\n",
-                               soc_dai->rate);
-
-               ret = snd_pcm_hw_constraint_single(substream->runtime,
-                                               SNDRV_PCM_HW_PARAM_RATE,
-                                               soc_dai->rate);
-               if (ret < 0) {
-                       dev_err(soc_dai->dev,
-                               "ASoC: Unable to apply rate constraint: %d\n",
-                               ret);
-                       return ret;
-               }
-       }
-
-       if (soc_dai->channels && (soc_dai->driver->symmetric_channels ||
-                               rtd->dai_link->symmetric_channels)) {
-               dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %d channel(s)\n",
-                               soc_dai->channels);
-
-               ret = snd_pcm_hw_constraint_single(substream->runtime,
-                                               SNDRV_PCM_HW_PARAM_CHANNELS,
-                                               soc_dai->channels);
-               if (ret < 0) {
-                       dev_err(soc_dai->dev,
-                               "ASoC: Unable to apply channel symmetry constraint: %d\n",
-                               ret);
-                       return ret;
-               }
-       }
-
-       if (soc_dai->sample_bits && (soc_dai->driver->symmetric_sample_bits ||
-                               rtd->dai_link->symmetric_sample_bits)) {
-               dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %d sample bits\n",
-                               soc_dai->sample_bits);
-
-               ret = snd_pcm_hw_constraint_single(substream->runtime,
-                                               SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
-                                               soc_dai->sample_bits);
-               if (ret < 0) {
-                       dev_err(soc_dai->dev,
-                               "ASoC: Unable to apply sample bits symmetry constraint: %d\n",
-                               ret);
-                       return ret;
-               }
-       }
+#define __soc_pcm_apply_symmetry(name, NAME)                           \
+       if (soc_dai->name && (soc_dai->driver->symmetric_##name ||      \
+                             rtd->dai_link->symmetric_##name)) {       \
+               dev_dbg(soc_dai->dev, "ASoC: Symmetry forces %s to %d\n",\
+                       #name, soc_dai->name);                          \
+                                                                       \
+               ret = snd_pcm_hw_constraint_single(substream->runtime,  \
+                                                  SNDRV_PCM_HW_PARAM_##NAME,\
+                                                  soc_dai->name);      \
+               if (ret < 0) {                                          \
+                       dev_err(soc_dai->dev,                           \
+                               "ASoC: Unable to apply %s constraint: %d\n",\
+                               #name, ret);                            \
+                       return ret;                                     \
+               }                                                       \
+       }
+
+       __soc_pcm_apply_symmetry(rate,          RATE);
+       __soc_pcm_apply_symmetry(channels,      CHANNELS);
+       __soc_pcm_apply_symmetry(sample_bits,   SAMPLE_BITS);
 
        return 0;
 }