dai_link->cpus = cpu;
        dai_link->num_cpus = 1;
 
-       ret = meson_card_parse_dai(card, np, &dai_link->cpus->of_node,
-                                  &dai_link->cpus->dai_name);
+       ret = meson_card_parse_dai(card, np, dai_link->cpus);
        if (ret)
                return ret;
 
 
        dai_link->cpus = cpu;
        dai_link->num_cpus = 1;
 
-       ret = meson_card_parse_dai(card, np, &dai_link->cpus->of_node,
-                                  &dai_link->cpus->dai_name);
+       ret = meson_card_parse_dai(card, np, dai_link->cpus);
        if (ret)
                return ret;
 
 
 
 int meson_card_parse_dai(struct snd_soc_card *card,
                         struct device_node *node,
-                        struct device_node **dai_of_node,
-                        const char **dai_name)
+                        struct snd_soc_dai_link_component *dlc)
 {
-       struct of_phandle_args args;
        int ret;
 
-       if (!dai_name || !dai_of_node || !node)
+       if (!dlc || !node)
                return -EINVAL;
 
-       ret = of_parse_phandle_with_args(node, "sound-dai",
-                                        "#sound-dai-cells", 0, &args);
+       ret = snd_soc_of_get_dlc(node, NULL, dlc, 0);
        if (ret)
                return dev_err_probe(card->dev, ret, "can't parse dai\n");
 
-       *dai_of_node = args.np;
-
-       return snd_soc_get_dai_name(&args, dai_name);
+       return ret;
 }
 EXPORT_SYMBOL_GPL(meson_card_parse_dai);
 
        link->num_codecs = num_codecs;
 
        for_each_child_of_node(node, np) {
-               ret = meson_card_parse_dai(card, np, &codec->of_node,
-                                          &codec->dai_name);
+               ret = meson_card_parse_dai(card, np, codec);
                if (ret) {
                        of_node_put(np);
                        return ret;
 
                                unsigned int num_links);
 int meson_card_parse_dai(struct snd_soc_card *card,
                         struct device_node *node,
-                        struct device_node **dai_of_node,
-                        const char **dai_name);
+                        struct snd_soc_dai_link_component *dlc);
 int meson_card_set_be_link(struct snd_soc_card *card,
                           struct snd_soc_dai_link *link,
                           struct device_node *node);