aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/base.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index ddf224d456b..e6627b2320f 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -9,7 +9,8 @@
9 * 9 *
10 * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net 10 * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net
11 * 11 *
12 * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. 12 * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and
13 * Grant Likely.
13 * 14 *
14 * This program is free software; you can redistribute it and/or 15 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License 16 * modify it under the terms of the GNU General Public License
@@ -82,6 +83,29 @@ struct property *of_find_property(const struct device_node *np,
82} 83}
83EXPORT_SYMBOL(of_find_property); 84EXPORT_SYMBOL(of_find_property);
84 85
86/**
87 * of_find_all_nodes - Get next node in global list
88 * @prev: Previous node or NULL to start iteration
89 * of_node_put() will be called on it
90 *
91 * Returns a node pointer with refcount incremented, use
92 * of_node_put() on it when done.
93 */
94struct device_node *of_find_all_nodes(struct device_node *prev)
95{
96 struct device_node *np;
97
98 read_lock(&devtree_lock);
99 np = prev ? prev->allnext : allnodes;
100 for (; np != NULL; np = np->allnext)
101 if (of_node_get(np))
102 break;
103 of_node_put(prev);
104 read_unlock(&devtree_lock);
105 return np;
106}
107EXPORT_SYMBOL(of_find_all_nodes);
108
85/* 109/*
86 * Find a property with a given name for a given node 110 * Find a property with a given name for a given node
87 * and return the value. 111 * and return the value.