diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index 14c8b3a74c2d..8e037835bc58 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -318,15 +318,19 @@ void asoc_simple_shutdown(struct snd_pcm_substream *substream) int i; for_each_prop_dai_cpu(props, i, dai) { - if (props->mclk_fs && !dai->clk_fixed) - snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, i), + struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, i); + + if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(cpu_dai)) + snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_IN); asoc_simple_clk_disable(dai); } for_each_prop_dai_codec(props, i, dai) { - if (props->mclk_fs && !dai->clk_fixed) - snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, i), + struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, i); + + if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(codec_dai)) + snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN); asoc_simple_clk_disable(dai);