aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-12-08 10:46:56 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-12-08 10:46:56 -0500
commit3ad1f3b35e8309ec93454dbf89beaafcdb5312da (patch)
treed26e60c334b70adc310b807a33d3491dc205d52d /drivers
parent1557d33007f63dd96e5d15f33af389378e5f2e54 (diff)
parente91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9 (diff)
Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6
* 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6: of: merge of_find_all_nodes() implementations of: merge other miscellaneous prototypes of: merge of_*_flat_dt*() functions of: merge of_node_get(), of_node_put() and of_find_all_nodes() of: merge of_read_number() an of_read_ulong() of: merge of_node_*_flag() and set_node_proc_entry() of: merge struct boot_param_header from Microblaze and PowerPC of: add common header for flattened device tree representation of: Move OF_IS_DYNAMIC and OF_MARK_DYNAMIC macros to of.h of: merge struct device_node of: merge phandle, ihandle and struct property of: Rework linux/of.h and asm/prom.h include ordering
Diffstat (limited to 'drivers')
-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 ddf224d456b2..e6627b2320f1 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.