]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: soc-pcm: cleanup dpcm_fe_dai_do_trigger()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 12 Feb 2025 02:29:14 +0000 (02:29 +0000)
committerMark Brown <broonie@kernel.org>
Sun, 16 Feb 2025 23:51:08 +0000 (23:51 +0000)
dpcm_fe_dai_do_trigger() has big duplicate code. Let's makes code
more simple.

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

index 8a3073a506aa2ad7a580e2da9f06b0804962cc18..2a53a2eb4acd2fc88db66ed34e728e28b462b34c 100644 (file)
@@ -2386,46 +2386,17 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)
        struct snd_soc_pcm_runtime *fe = snd_soc_substream_to_rtd(substream);
        int stream = substream->stream;
        int ret = 0;
+       int fe_first;
        enum snd_soc_dpcm_trigger trigger = fe->dai_link->trigger[stream];
 
        fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_FE;
 
        switch (trigger) {
        case SND_SOC_DPCM_TRIGGER_PRE:
-               switch (cmd) {
-               case SNDRV_PCM_TRIGGER_START:
-               case SNDRV_PCM_TRIGGER_RESUME:
-               case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               case SNDRV_PCM_TRIGGER_DRAIN:
-                       ret = dpcm_dai_trigger_fe_be(substream, cmd, true);
-                       break;
-               case SNDRV_PCM_TRIGGER_STOP:
-               case SNDRV_PCM_TRIGGER_SUSPEND:
-               case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-                       ret = dpcm_dai_trigger_fe_be(substream, cmd, false);
-                       break;
-               default:
-                       ret = -EINVAL;
-                       break;
-               }
+               fe_first = true;
                break;
        case SND_SOC_DPCM_TRIGGER_POST:
-               switch (cmd) {
-               case SNDRV_PCM_TRIGGER_START:
-               case SNDRV_PCM_TRIGGER_RESUME:
-               case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               case SNDRV_PCM_TRIGGER_DRAIN:
-                       ret = dpcm_dai_trigger_fe_be(substream, cmd, false);
-                       break;
-               case SNDRV_PCM_TRIGGER_STOP:
-               case SNDRV_PCM_TRIGGER_SUSPEND:
-               case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-                       ret = dpcm_dai_trigger_fe_be(substream, cmd, true);
-                       break;
-               default:
-                       ret = -EINVAL;
-                       break;
-               }
+               fe_first = false;
                break;
        default:
                dev_err(fe->dev, "ASoC: invalid trigger cmd %d for %s\n", cmd,
@@ -2434,6 +2405,23 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)
                goto out;
        }
 
+       switch (cmd) {
+       case SNDRV_PCM_TRIGGER_START:
+       case SNDRV_PCM_TRIGGER_RESUME:
+       case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+       case SNDRV_PCM_TRIGGER_DRAIN:
+               ret = dpcm_dai_trigger_fe_be(substream, cmd, fe_first);
+               break;
+       case SNDRV_PCM_TRIGGER_STOP:
+       case SNDRV_PCM_TRIGGER_SUSPEND:
+       case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+               ret = dpcm_dai_trigger_fe_be(substream, cmd, !fe_first);
+               break;
+       default:
+               ret = -EINVAL;
+               break;
+       }
+
        if (ret < 0)
                goto out;