{
        int ret = 0;
 
+       if (!snd_soc_dai_stream_valid(dai, substream->stream))
+               return 0;
+
        if (dai->driver->ops &&
            dai->driver->ops->startup)
                ret = dai->driver->ops->startup(substream, dai);
                          struct snd_pcm_substream *substream,
                          int rollback)
 {
+       if (!snd_soc_dai_stream_valid(dai, substream->stream))
+               return;
+
        if (rollback && !soc_dai_mark_match(dai, substream, startup))
                return;
 
        int i, ret;
 
        for_each_rtd_dais(rtd, i, dai) {
+               if (!snd_soc_dai_stream_valid(dai, substream->stream))
+                       continue;
                if (dai->driver->ops &&
                    dai->driver->ops->prepare) {
                        ret = dai->driver->ops->prepare(substream, dai);
 {
        int ret = 0;
 
+       if (!snd_soc_dai_stream_valid(dai, substream->stream))
+               return 0;
+
        if (dai->driver->ops &&
            dai->driver->ops->trigger)
                ret = dai->driver->ops->trigger(substream, cmd, dai);