if (!rollback) {
                snd_soc_runtime_deactivate(rtd, substream->stream);
-               /* clear the corresponding DAIs parameters when going to be inactive */
-               for_each_rtd_dais(rtd, i, dai) {
-                       if (snd_soc_dai_active(dai) == 0)
-                               soc_pcm_set_dai_params(dai, NULL);
 
-                       if (snd_soc_dai_stream_active(dai, substream->stream) == 0)
-                               snd_soc_dai_digital_mute(dai, 1, substream->stream);
-               }
+               /* Make sure DAI parameters cleared if the DAI becomes inactive */
+               for_each_rtd_dais(rtd, i, dai)
+                       if (snd_soc_dai_active(dai) == 0 &&
+                           (dai->rate || dai->channels || dai->sample_bits))
+                               soc_pcm_set_dai_params(dai, NULL);
        }
 
        for_each_rtd_dais(rtd, i, dai)
 
        snd_soc_dpcm_mutex_assert_held(rtd);
 
+       /* clear the corresponding DAIs parameters when going to be inactive */
+       for_each_rtd_dais(rtd, i, dai) {
+               if (snd_soc_dai_active(dai) == 1)
+                       soc_pcm_set_dai_params(dai, NULL);
+
+               if (snd_soc_dai_stream_active(dai, substream->stream) == 1)
+                       snd_soc_dai_digital_mute(dai, 1, substream->stream);
+       }
+
        /* run the stream event */
        snd_soc_dapm_stream_stop(rtd, substream->stream);