struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct sst_byt_priv_data *pdata =
                snd_soc_platform_get_drvdata(rtd->platform);
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
        struct sst_byt *byt = pdata->byt;
        u32 rate, bits;
        u8 channels;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct sst_byt_priv_data *pdata =
                snd_soc_platform_get_drvdata(rtd->platform);
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
        struct sst_byt *byt = pdata->byt;
        int ret;
 
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct sst_byt_priv_data *pdata =
                snd_soc_platform_get_drvdata(rtd->platform);
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
        struct sst_byt *byt = pdata->byt;
 
        dev_dbg(rtd->dev, "PCM: trigger %d\n", cmd);
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_pcm_runtime *runtime = substream->runtime;
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_priv_data *pdata =
+               snd_soc_platform_get_drvdata(rtd->platform);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
 
        dev_dbg(rtd->dev, "PCM: DMA pointer %u bytes\n", pcm_data->hw_ptr);
 
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct sst_byt_priv_data *pdata =
                snd_soc_platform_get_drvdata(rtd->platform);
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
        struct sst_byt *byt = pdata->byt;
 
        dev_dbg(rtd->dev, "PCM: open\n");
 
-       pcm_data = &pdata->pcm[rtd->cpu_dai->id];
        mutex_lock(&pcm_data->mutex);
 
-       snd_soc_pcm_set_drvdata(rtd, pcm_data);
        pcm_data->substream = substream;
 
        snd_soc_set_runtime_hwparams(substream, &sst_byt_pcm_hardware);
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct sst_byt_priv_data *pdata =
                snd_soc_platform_get_drvdata(rtd->platform);
-       struct sst_byt_pcm_data *pcm_data = snd_soc_pcm_get_drvdata(rtd);
+       struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
        struct sst_byt *byt = pdata->byt;
        int ret;