]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: fsl: imx-card: Skip sysclk reset for active DAIs in shutdown
authorChancel Liu <chancel.liu@nxp.com>
Fri, 10 Jul 2026 03:13:33 +0000 (12:13 +0900)
committerMark Brown <broonie@kernel.org>
Tue, 14 Jul 2026 21:23:00 +0000 (22:23 +0100)
In a full-duplex setup, when one direction (playback or capture) is
closed while the other is still running, imx_aif_shutdown() was
unconditionally calling snd_soc_dai_set_sysclk() with rate=0 for all
cpu/codec DAIs, which would disable the clock still needed by the
active stream.

Add snd_soc_dai_active() checks before clearing sysclk so that only
truly inactive DAIs have their clocks reset.

Fixes: 2260bc6ea8bd ("ASoC: imx-card: Add WM8524 support")
Cc: stable@vger.kernel.org
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
Link: https://patch.msgid.link/20260710031333.3491445-1-chancel.liu@oss.nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/imx-card.c

index a4518fefad69069ff46898e1f466523696a7afb9..43438af1e1c680992eac3cd8e09de37f32259857 100644 (file)
@@ -496,11 +496,15 @@ static void imx_aif_shutdown(struct snd_pcm_substream *substream)
        struct snd_soc_dai *codec_dai;
        int i;
 
-       for_each_rtd_cpu_dais(rtd, i, cpu_dai)
-               snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT);
+       for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
+               if (!snd_soc_dai_active(cpu_dai))
+                       snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT);
+       }
 
-       for_each_rtd_codec_dais(rtd, i, codec_dai)
-               snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN);
+       for_each_rtd_codec_dais(rtd, i, codec_dai) {
+               if (!snd_soc_dai_active(codec_dai))
+                       snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN);
+       }
 }
 
 static const struct snd_soc_ops imx_aif_ops = {