ASoC: soc-pcm: cleanup soc_pcm_apply_msb()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 19 Feb 2020 06:56:36 +0000 (15:56 +0900)
committerMark Brown <broonie@kernel.org>
Mon, 24 Feb 2020 21:18:29 +0000 (21:18 +0000)
soc_pcm_apply_msb() apply msb for CPU/Codec,
but, it has duplicate code. The difference is only
SNDRV_PCM_STREAM_PLAYBACK and SNDRV_PCM_STEAM_CAPTURE.

It is very verbose and duplicate code.
This patch simplify code by using snd_soc_dai_get_pcm_stream().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87eeurjca6.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-pcm.c

index 7cb445b..6f56526 100644 (file)
@@ -363,29 +363,24 @@ static void soc_pcm_apply_msb(struct snd_pcm_substream *substream)
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        struct snd_soc_dai *codec_dai;
+       struct snd_soc_pcm_stream *pcm_codec, *pcm_cpu;
+       int stream = substream->stream;
        int i;
        unsigned int bits = 0, cpu_bits;
 
-       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               for_each_rtd_codec_dai(rtd, i, codec_dai) {
-                       if (codec_dai->driver->playback.sig_bits == 0) {
-                               bits = 0;
-                               break;
-                       }
-                       bits = max(codec_dai->driver->playback.sig_bits, bits);
-               }
-               cpu_bits = cpu_dai->driver->playback.sig_bits;
-       } else {
-               for_each_rtd_codec_dai(rtd, i, codec_dai) {
-                       if (codec_dai->driver->capture.sig_bits == 0) {
-                               bits = 0;
-                               break;
-                       }
-                       bits = max(codec_dai->driver->capture.sig_bits, bits);
+       for_each_rtd_codec_dai(rtd, i, codec_dai) {
+               pcm_codec = snd_soc_dai_get_pcm_stream(codec_dai, stream);
+
+               if (pcm_codec->sig_bits == 0) {
+                       bits = 0;
+                       break;
                }
-               cpu_bits = cpu_dai->driver->capture.sig_bits;
+               bits = max(pcm_codec->sig_bits, bits);
        }
 
+       pcm_cpu = snd_soc_dai_get_pcm_stream(cpu_dai, stream);
+       cpu_bits = pcm_cpu->sig_bits;
+
        soc_pcm_set_msb(substream, bits);
        soc_pcm_set_msb(substream, cpu_bits);
 }