{
        struct snd_soc_component *component;
        struct snd_soc_dai *dai;
+       struct device_node *component_of_node;
 
        lockdep_assert_held(&client_mutex);
 
        /* Find CPU DAI from registered DAIs*/
        list_for_each_entry(component, &component_list, list) {
-               if (dlc->of_node && component->dev->of_node != dlc->of_node)
+               component_of_node = component->dev->of_node;
+               if (!component_of_node && component->dev->parent)
+                       component_of_node = component->dev->parent->of_node;
+
+               if (dlc->of_node && component_of_node != dlc->of_node)
                        continue;
                if (dlc->name && strcmp(component->name, dlc->name))
                        continue;
                                const char **dai_name)
 {
        struct snd_soc_component *pos;
+       struct device_node *component_of_node;
        int ret = -EPROBE_DEFER;
 
        mutex_lock(&client_mutex);
        list_for_each_entry(pos, &component_list, list) {
-               if (pos->dev->of_node != args->np)
+               component_of_node = pos->dev->of_node;
+               if (!component_of_node && pos->dev->parent)
+                       component_of_node = pos->dev->parent->of_node;
+
+               if (component_of_node != args->np)
                        continue;
 
                if (pos->driver->of_xlate_dai_name) {