static inline bool rz_ssi_is_dma_enabled(struct rz_ssi_priv *ssi)
 {
-       return (ssi->playback.dma_ch || ssi->capture.dma_ch);
+       return (ssi->playback.dma_ch && (ssi->dma_rt || ssi->capture.dma_ch));
 }
 
 static int rz_ssi_stream_is_valid(struct rz_ssi_priv *ssi,
 static int rz_ssi_dma_request(struct rz_ssi_priv *ssi, struct device *dev)
 {
        ssi->playback.dma_ch = dma_request_chan(dev, "tx");
+       if (IS_ERR(ssi->playback.dma_ch))
+               ssi->playback.dma_ch = NULL;
+
        ssi->capture.dma_ch = dma_request_chan(dev, "rx");
+       if (IS_ERR(ssi->capture.dma_ch))
+               ssi->capture.dma_ch = NULL;
+
        if (!ssi->playback.dma_ch && !ssi->capture.dma_ch) {
                ssi->playback.dma_ch = dma_request_chan(dev, "rt");
-               if (!ssi->playback.dma_ch)
+               if (IS_ERR(ssi->playback.dma_ch)) {
+                       ssi->playback.dma_ch = NULL;
                        goto no_dma;
+               }
 
                ssi->dma_rt = true;
        }
 
+       if (!rz_ssi_is_dma_enabled(ssi))
+               goto no_dma;
+
        if (ssi->playback.dma_ch &&
            (rz_ssi_dma_slave_config(ssi, ssi->playback.dma_ch, true) < 0))
                goto no_dma;