Re: [RESEND PATCH v3 1/5] dt: introduce of_get_child_by_name to get child node by name.
From: Rob Herring <hidden>
Date: 2012-09-17 12:59:08
Also in:
linuxppc-dev
On 09/17/2012 06:58 AM, Srinivas KANDAGATLA wrote:
From: Srinivas Kandagatla <redacted>
Please drop the period on the subject.
quoted hunk ↗ jump to hunk
This patch introduces of_get_child_by_name function to get a child node by its name in a given parent node. Without this patch each driver code has to iterate the parent and do a string compare, However having of_get_child_by_name libary function would avoid code duplication, errors and is more convenient. Signed-off-by: Srinivas Kandagatla <redacted> --- drivers/of/base.c | 25 +++++++++++++++++++++++++ include/linux/of.h | 2 ++ 2 files changed, 27 insertions(+), 0 deletions(-)diff --git a/drivers/of/base.c b/drivers/of/base.c index d4a1c9a..7391f8a 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c@@ -391,6 +391,31 @@ struct device_node *of_get_next_available_child(const struct device_node *node, EXPORT_SYMBOL(of_get_next_available_child); /** + * of_get_child_by_name - Find the child node by name for a given parent + * @node: parent node + * @name: child name to look for. + * + * This function looks for child node for given matching name + * + * Returns a node pointer if found, with refcount incremented, use + * of_node_put() on it when done. + * Returns NULL if node is not found. + */ +
Remove blank line.
+struct device_node *of_get_child_by_name(const struct device_node *node,
+ const char *name)
+{
+ struct device_node *child;
+
+ for_each_child_of_node(node, child)
+ if (child->name && (of_node_cmp(child->name, name) == 0)
+ && of_node_get(child))of_get_next_child has already called of_node_get, so you don't need to call it here.
quoted hunk ↗ jump to hunk
+ break; + return child; +} +EXPORT_SYMBOL(of_get_child_by_name); + +/** * of_find_node_by_path - Find a node matching a full OF path * @path: The full path to match *diff --git a/include/linux/of.h b/include/linux/of.h index 1b11632..7b8e3cd 100644 --- a/include/linux/of.h +++ b/include/linux/of.h@@ -192,6 +192,8 @@ extern struct device_node *of_get_next_child(const struct device_node *node, struct device_node *prev); extern struct device_node *of_get_next_available_child( const struct device_node *node, struct device_node *prev); +extern struct device_node *of_get_child_by_name(const struct device_node *node, + const char *name); #define for_each_child_of_node(parent, child) \ for (child = of_get_next_child(parent, NULL); child != NULL; \