aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorTimur Tabi <timur@freescale.com>2012-08-14 09:20:23 -0400
committerDavid S. Miller <davem@davemloft.net>2012-08-20 05:16:00 -0400
commit3296193d1421c2d6f9e49e181cecfd917f0f5764 (patch)
treee3252ad5cd1979bbdf64f46975b602f474fa2bb3 /drivers/of
parent476ad154f3b41dd7d9a08a2f641e28388abc2fd1 (diff)
dt: introduce for_each_available_child_of_node, of_get_next_available_child
Macro for_each_child_of_node() makes it easy to iterate over all of the children for a given device tree node, including those nodes that are marked as unavailable (i.e. status = "disabled"). Introduce for_each_available_child_of_node(), which is like for_each_child_of_node(), but it automatically skips unavailable nodes. This also requires the introduction of helper function of_get_next_available_child(), which returns the next available child node. Signed-off-by: Timur Tabi <timur@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/base.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index c181b94abc36..d4a1c9a043e1 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -364,6 +364,33 @@ struct device_node *of_get_next_child(const struct device_node *node,
364EXPORT_SYMBOL(of_get_next_child); 364EXPORT_SYMBOL(of_get_next_child);
365 365
366/** 366/**
367 * of_get_next_available_child - Find the next available child node
368 * @node: parent node
369 * @prev: previous child of the parent node, or NULL to get first
370 *
371 * This function is like of_get_next_child(), except that it
372 * automatically skips any disabled nodes (i.e. status = "disabled").
373 */
374struct device_node *of_get_next_available_child(const struct device_node *node,
375 struct device_node *prev)
376{
377 struct device_node *next;
378
379 read_lock(&devtree_lock);
380 next = prev ? prev->sibling : node->child;
381 for (; next; next = next->sibling) {
382 if (!of_device_is_available(next))
383 continue;
384 if (of_node_get(next))
385 break;
386 }
387 of_node_put(prev);
388 read_unlock(&devtree_lock);
389 return next;
390}
391EXPORT_SYMBOL(of_get_next_available_child);
392
393/**
367 * of_find_node_by_path - Find a node matching a full OF path 394 * of_find_node_by_path - Find a node matching a full OF path
368 * @path: The full path to match 395 * @path: The full path to match
369 * 396 *