ASoC: fsl: imx-card: Skip sysclk reset for active DAIs in shutdown

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: 2260bc6ea8 ("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>
This commit is contained in:
Chancel Liu 2026-07-10 12:13:33 +09:00 committed by Mark Brown
parent d9e96f859d
commit 9f86aea992
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View 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 = {