}
 
 static int intel_params_stream(struct sdw_intel *sdw,
-                              struct snd_pcm_substream *substream,
+                              int stream,
                               struct snd_soc_dai *dai,
                               struct snd_pcm_hw_params *hw_params,
                               int link_id, int alh_stream_id)
        struct sdw_intel_link_res *res = sdw->link_res;
        struct sdw_intel_stream_params_data params_data;
 
-       params_data.substream = substream;
+       params_data.stream = stream; /* direction */
        params_data.dai = dai;
        params_data.hw_params = hw_params;
        params_data.link_id = link_id;
 }
 
 static int intel_free_stream(struct sdw_intel *sdw,
-                            struct snd_pcm_substream *substream,
+                            int stream,
                             struct snd_soc_dai *dai,
                             int link_id)
 {
        struct sdw_intel_link_res *res = sdw->link_res;
        struct sdw_intel_stream_free_data free_data;
 
-       free_data.substream = substream;
+       free_data.stream = stream; /* direction */
        free_data.dai = dai;
        free_data.link_id = link_id;
 
        dma->hw_params = params;
 
        /* Inform DSP about PDI stream number */
-       ret = intel_params_stream(sdw, substream, dai, params,
+       ret = intel_params_stream(sdw, substream->stream, dai, params,
                                  sdw->instance,
                                  pdi->intel_alh_id);
        if (ret)
                sdw_cdns_config_stream(cdns, ch, dir, dma->pdi);
 
                /* Inform DSP about PDI stream number */
-               ret = intel_params_stream(sdw, substream, dai,
+               ret = intel_params_stream(sdw, substream->stream, dai,
                                          dma->hw_params,
                                          sdw->instance,
                                          dma->pdi->intel_alh_id);
                return ret;
        }
 
-       ret = intel_free_stream(sdw, substream, dai, sdw->instance);
+       ret = intel_free_stream(sdw, substream->stream, dai, sdw->instance);
        if (ret < 0) {
                dev_err(dai->dev, "intel_free_stream: failed %d\n", ret);
                return ret;
 
 static int sdw_params_stream(struct device *dev,
                             struct sdw_intel_stream_params_data *params_data)
 {
-       struct snd_pcm_substream *substream = params_data->substream;
        struct snd_sof_dev *sdev = dev_get_drvdata(dev);
        struct snd_soc_dai *d = params_data->dai;
        struct snd_soc_dapm_widget *w;
 
-       w = snd_soc_dai_get_widget(d, substream->stream);
+       w = snd_soc_dai_get_widget(d, params_data->stream);
 
        return sdw_dai_config_ipc(sdev, w, params_data->link_id, params_data->alh_stream_id,
                                  d->id, true);
 static int sdw_free_stream(struct device *dev,
                           struct sdw_intel_stream_free_data *free_data)
 {
-       struct snd_pcm_substream *substream = free_data->substream;
        struct snd_sof_dev *sdev = dev_get_drvdata(dev);
        struct snd_soc_dai *d = free_data->dai;
        struct snd_soc_dapm_widget *w;
 
-       w = snd_soc_dai_get_widget(d, substream->stream);
+       w = snd_soc_dai_get_widget(d, free_data->stream);
 
        /* send invalid stream_id */
        return sdw_dai_config_ipc(sdev, w, free_data->link_id, 0xFFFF, d->id, false);