|
@@ -363,6 +363,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
|