]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/of/base.c
of: Use device_type helpers to access the node type
[linux.git] / drivers / of / base.c
index 09692c9b32a71c8f080653af4312b56ad55467a4..57c837140a8bdf3c80fa2ceed9e2d5c54a5dcac2 100644 (file)
@@ -79,6 +79,13 @@ bool of_node_name_prefix(const struct device_node *np, const char *prefix)
 }
 EXPORT_SYMBOL(of_node_name_prefix);
 
+static bool __of_node_is_type(const struct device_node *np, const char *type)
+{
+       const char *match = __of_get_property(np, "device_type", NULL);
+
+       return np && match && type && !strcmp(match, type);
+}
+
 int of_n_addr_cells(struct device_node *np)
 {
        u32 cells;
@@ -482,7 +489,7 @@ static int __of_device_is_compatible(const struct device_node *device,
 
        /* Matching type is better than matching name */
        if (type && type[0]) {
-               if (!device->type || of_node_cmp(type, device->type))
+               if (!__of_node_is_type(device, type))
                        return 0;
                score += 2;
        }
@@ -775,7 +782,7 @@ struct device_node *of_get_next_cpu_node(struct device_node *prev)
        }
        for (; next; next = next->sibling) {
                if (!(of_node_name_eq(next, "cpu") ||
-                     (next->type && !of_node_cmp(next->type, "cpu"))))
+                     __of_node_is_type(next, "cpu")))
                        continue;
                if (of_node_get(next))
                        break;
@@ -983,8 +990,7 @@ struct device_node *of_find_node_by_type(struct device_node *from,
 
        raw_spin_lock_irqsave(&devtree_lock, flags);
        for_each_of_allnodes_from(from, np)
-               if (np->type && (of_node_cmp(np->type, type) == 0)
-                   && of_node_get(np))
+               if (__of_node_is_type(np, type) && of_node_get(np))
                        break;
        of_node_put(from);
        raw_spin_unlock_irqrestore(&devtree_lock, flags);
@@ -2108,9 +2114,9 @@ struct device_node *of_find_next_cache_node(const struct device_node *np)
        /* OF on pmac has nodes instead of properties named "l2-cache"
         * beneath CPU nodes.
         */
-       if (IS_ENABLED(CONFIG_PPC_PMAC) && !strcmp(np->type, "cpu"))
+       if (IS_ENABLED(CONFIG_PPC_PMAC) && of_node_is_type(np, "cpu"))
                for_each_child_of_node(np, child)
-                       if (!strcmp(child->type, "cache"))
+                       if (of_node_is_type(child, "cache"))
                                return child;
 
        return NULL;