diff options
Diffstat (limited to 'drivers/of/base.c')
| -rw-r--r-- | drivers/of/base.c | 27 | 
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index c181b94abc3..d4a1c9a043e 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,  EXPORT_SYMBOL(of_get_next_child);  /** + *	of_get_next_available_child - Find the next available child node + *	@node:	parent node + *	@prev:	previous child of the parent node, or NULL to get first + * + *      This function is like of_get_next_child(), except that it + *      automatically skips any disabled nodes (i.e. status = "disabled"). + */ +struct device_node *of_get_next_available_child(const struct device_node *node, +	struct device_node *prev) +{ +	struct device_node *next; + +	read_lock(&devtree_lock); +	next = prev ? prev->sibling : node->child; +	for (; next; next = next->sibling) { +		if (!of_device_is_available(next)) +			continue; +		if (of_node_get(next)) +			break; +	} +	of_node_put(prev); +	read_unlock(&devtree_lock); +	return next; +} +EXPORT_SYMBOL(of_get_next_available_child); + +/**   *	of_find_node_by_path - Find a node matching a full OF path   *	@path:	The full path to match   *  |