struct sdw_intel *sdw = cdns_to_intel(cdns);
        struct sdw_cdns_dma_data *dma;
        int ch, dir;
-       int ret;
+       int ret = 0;
 
        dma = snd_soc_dai_get_dma_data(dai, substream);
        if (!dma) {
                                          dma->hw_params,
                                          sdw->instance,
                                          dma->pdi->intel_alh_id);
-               if (ret)
-                       goto err;
        }
 
-       ret = sdw_prepare_stream(dma->stream);
-
-err:
        return ret;
 }
 
        if (!dma)
                return -EIO;
 
-       ret = sdw_deprepare_stream(dma->stream);
-       if (ret) {
-               dev_err(dai->dev, "sdw_deprepare_stream: failed %d", ret);
-               return ret;
-       }
-
+       /*
+        * The sdw stream state will transition to RELEASED when stream->
+        * master_list is empty. So the stream state will transition to
+        * DEPREPARED for the first cpu-dai and to RELEASED for the last
+        * cpu-dai.
+        */
        ret = sdw_stream_remove_master(&cdns->bus, dma->stream);
        if (ret < 0) {
                dev_err(dai->dev, "remove master from stream %s failed: %d\n",