aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/generic/simple-card-utils.c12
1 files changed, 8 insertions, 4 deletions
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);