diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:46:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:46:56 -0500 |
commit | 3ad1f3b35e8309ec93454dbf89beaafcdb5312da (patch) | |
tree | d26e60c334b70adc310b807a33d3491dc205d52d /drivers | |
parent | 1557d33007f63dd96e5d15f33af389378e5f2e54 (diff) | |
parent | e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9 (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.c | 26 |
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 | } |
83 | EXPORT_SYMBOL(of_find_property); | 84 | EXPORT_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 | */ | ||
94 | struct 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 | } | ||
107 | EXPORT_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. |