]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/of/base.c
Consolidate of_get_next_child
[karo-tx-linux.git] / drivers / of / base.c
index 82bb78680ff6ca73117898d5f2354dd497f6d37f..6b6dfcc56522122ff4e5f99af3d227318cef8b40 100644 (file)
@@ -134,3 +134,27 @@ struct device_node *of_get_parent(const struct device_node *node)
        return np;
 }
 EXPORT_SYMBOL(of_get_parent);
+
+/**
+ *     of_get_next_child - Iterate a node childs
+ *     @node:  parent node
+ *     @prev:  previous child of the parent node, or NULL to get first
+ *
+ *     Returns a node pointer with refcount incremented, use
+ *     of_node_put() on it when done.
+ */
+struct device_node *of_get_next_child(const struct device_node *node,
+       struct device_node *prev)
+{
+       struct device_node *next;
+
+       read_lock(&devtree_lock);
+       next = prev ? prev->sibling : node->child;
+       for (; next; next = next->sibling)
+               if (of_node_get(next))
+                       break;
+       of_node_put(prev);
+       read_unlock(&devtree_lock);
+       return next;
+}
+EXPORT_SYMBOL(of_get_next_child);