static struct snd_soc_dapm_widget *
 snd_soc_dapm_new_dai(struct snd_soc_card *card, struct snd_soc_pcm_runtime *rtd,
-                    struct snd_soc_dapm_widget *source,
-                    struct snd_soc_dapm_widget *sink)
+                    char *id)
 {
        struct snd_soc_dapm_widget template;
        struct snd_soc_dapm_widget *w;
        int ret;
 
        link_name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-%s",
-                                  source->name, sink->name);
+                                  rtd->dai_link->name, id);
        if (!link_name)
                return ERR_PTR(-ENOMEM);
 
        }
 
        for_each_rtd_codec_dai(rtd, i, codec_dai) {
-
                /* connect BE DAI playback if widgets are valid */
                codec = codec_dai->playback_widget;
 
                if (playback_cpu && codec) {
                        if (!playback) {
                                playback = snd_soc_dapm_new_dai(card, rtd,
-                                                               playback_cpu,
-                                                               codec);
+                                                               "playback");
                                if (IS_ERR(playback)) {
                                        dev_err(rtd->dev,
                                                "ASoC: Failed to create DAI %s: %ld\n",
                if (codec && capture_cpu) {
                        if (!capture) {
                                capture = snd_soc_dapm_new_dai(card, rtd,
-                                                              codec,
-                                                              capture_cpu);
+                                                              "capture");
                                if (IS_ERR(capture)) {
                                        dev_err(rtd->dev,
                                                "ASoC: Failed to create DAI %s: %ld\n",