@@ -700,10 +700,16 @@ static int soc_pcm_clean(struct snd_soc_pcm_runtime *rtd,
700700 snd_soc_runtime_deactivate (rtd , substream -> stream );
701701
702702 /* Make sure DAI parameters cleared if the DAI becomes inactive */
703- for_each_rtd_dais (rtd , i , dai )
703+ for_each_rtd_dais (rtd , i , dai ) {
704704 if (snd_soc_dai_active (dai ) == 0 &&
705705 (dai -> rate || dai -> channels || dai -> sample_bits ))
706706 soc_pcm_set_dai_params (dai , NULL );
707+
708+ if (snd_soc_dai_stream_active (dai , substream -> stream ) == 0 ) {
709+ if (dai -> driver -> ops && !dai -> driver -> ops -> mute_unmute_on_trigger )
710+ snd_soc_dai_digital_mute (dai , 1 , substream -> stream );
711+ }
712+ }
707713 }
708714
709715 for_each_rtd_dais (rtd , i , dai )
@@ -896,8 +902,10 @@ static int __soc_pcm_prepare(struct snd_soc_pcm_runtime *rtd,
896902 snd_soc_dapm_stream_event (rtd , substream -> stream ,
897903 SND_SOC_DAPM_STREAM_START );
898904
899- for_each_rtd_dais (rtd , i , dai )
900- snd_soc_dai_digital_mute (dai , 0 , substream -> stream );
905+ for_each_rtd_dais (rtd , i , dai ) {
906+ if (dai -> driver -> ops && !dai -> driver -> ops -> mute_unmute_on_trigger )
907+ snd_soc_dai_digital_mute (dai , 0 , substream -> stream );
908+ }
901909
902910out :
903911 return soc_pcm_ret (rtd , ret );
0 commit comments