{
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct stm32_adfsdm_priv *priv =
-               snd_soc_dai_get_drvdata(rtd->cpu_dai);
+               snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
                                 struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct stm32_adfsdm_priv *priv = snd_soc_dai_get_drvdata(rtd->cpu_dai);
+       struct stm32_adfsdm_priv *priv = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
        int ret;
 
        ret =  snd_soc_set_runtime_hwparams(substream, &stm32_adfsdm_pcm_hw);
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct stm32_adfsdm_priv *priv =
-               snd_soc_dai_get_drvdata(rtd->cpu_dai);
+               snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 
        priv->substream = NULL;
 
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct stm32_adfsdm_priv *priv =
-               snd_soc_dai_get_drvdata(rtd->cpu_dai);
+               snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 
        return bytes_to_frames(substream->runtime, priv->pos);
 }
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct stm32_adfsdm_priv *priv =
-               snd_soc_dai_get_drvdata(rtd->cpu_dai);
+               snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
 
        priv->pcm_buff = substream->runtime->dma_area;
 
 {
        struct snd_pcm *pcm = rtd->pcm;
        struct stm32_adfsdm_priv *priv =
-               snd_soc_dai_get_drvdata(rtd->cpu_dai);
+               snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
        unsigned int size = DFSDM_MAX_PERIODS * DFSDM_MAX_PERIOD_SIZE;
 
        snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV,
 
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct stm32_sai_sub_data *sai = dev_get_drvdata(cpu_dai->dev);
        int *ptr = (int *)(runtime->dma_area + hwoff +
                           channel * (runtime->dma_bytes / runtime->channels));