mirror of https://gitee.com/openkylin/linux.git
dt: introduce of_get_child_by_name to get child node by name
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 <srinivas.kandagatla@st.com> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
This commit is contained in:
parent
ee67016fcc
commit
9c19761a7e
|
@ -363,6 +363,29 @@ struct device_node *of_get_next_child(const struct device_node *node,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_get_next_child);
|
EXPORT_SYMBOL(of_get_next_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.
|
||||||
|
*/
|
||||||
|
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))
|
||||||
|
break;
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(of_get_child_by_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_find_node_by_path - Find a node matching a full OF path
|
* of_find_node_by_path - Find a node matching a full OF path
|
||||||
* @path: The full path to match
|
* @path: The full path to match
|
||||||
|
|
|
@ -190,6 +190,8 @@ extern struct device_node *of_get_parent(const struct device_node *node);
|
||||||
extern struct device_node *of_get_next_parent(struct device_node *node);
|
extern struct device_node *of_get_next_parent(struct device_node *node);
|
||||||
extern struct device_node *of_get_next_child(const struct device_node *node,
|
extern struct device_node *of_get_next_child(const struct device_node *node,
|
||||||
struct device_node *prev);
|
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) \
|
#define for_each_child_of_node(parent, child) \
|
||||||
for (child = of_get_next_child(parent, NULL); child != NULL; \
|
for (child = of_get_next_child(parent, NULL); child != NULL; \
|
||||||
child = of_get_next_child(parent, child))
|
child = of_get_next_child(parent, child))
|
||||||
|
|
Loading…
Reference in New Issue