diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2009-10-15 10:58:09 -0600 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-10-15 10:58:09 -0600 |
commit | e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9 (patch) | |
tree | 65030951a26540f26dc2f6b33d4b260879b3fdd2 /drivers/of | |
parent | 82b2928c95d824afd9af3bb41660f3c3fa1f234e (diff) | |
download | kernel-common-e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9.tar.gz kernel-common-e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9.tar.bz2 kernel-common-e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9.zip |
of: merge of_find_all_nodes() implementations
Merge common code between Microblaze and PowerPC, and make it available
to Sparc
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
Acked-by: Michal Simek <monstr@monstr.eu>
Acked-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Acked-by: Stephen Rothwell <sfr@canb.auug.org.au>
Diffstat (limited to 'drivers/of')
-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 @@ * * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net * - * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. + * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and + * Grant Likely. * * This program is free software; you can redistribute it and/or * 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, } EXPORT_SYMBOL(of_find_property); +/** + * of_find_all_nodes - Get next node in global list + * @prev: Previous node or NULL to start iteration + * of_node_put() will be called on it + * + * Returns a node pointer with refcount incremented, use + * of_node_put() on it when done. + */ +struct device_node *of_find_all_nodes(struct device_node *prev) +{ + struct device_node *np; + + read_lock(&devtree_lock); + np = prev ? prev->allnext : allnodes; + for (; np != NULL; np = np->allnext) + if (of_node_get(np)) + break; + of_node_put(prev); + read_unlock(&devtree_lock); + return np; +} +EXPORT_SYMBOL(of_find_all_nodes); + /* * Find a property with a given name for a given node * and return the value. |