aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of/base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/of/base.c')
-rw-r--r--drivers/of/base.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 7c79e94a35ea..4f884a358a7b 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -329,6 +329,41 @@ struct device_node *of_find_compatible_node(struct device_node *from,
329EXPORT_SYMBOL(of_find_compatible_node); 329EXPORT_SYMBOL(of_find_compatible_node);
330 330
331/** 331/**
332 * of_find_node_with_property - Find a node which has a property with
333 * the given name.
334 * @from: The node to start searching from or NULL, the node
335 * you pass will not be searched, only the next one
336 * will; typically, you pass what the previous call
337 * returned. of_node_put() will be called on it
338 * @prop_name: The name of the property to look for.
339 *
340 * Returns a node pointer with refcount incremented, use
341 * of_node_put() on it when done.
342 */
343struct device_node *of_find_node_with_property(struct device_node *from,
344 const char *prop_name)
345{
346 struct device_node *np;
347 struct property *pp;
348
349 read_lock(&devtree_lock);
350 np = from ? from->allnext : allnodes;
351 for (; np; np = np->allnext) {
352 for (pp = np->properties; pp != 0; pp = pp->next) {
353 if (of_prop_cmp(pp->name, prop_name) == 0) {
354 of_node_get(np);
355 goto out;
356 }
357 }
358 }
359out:
360 of_node_put(from);
361 read_unlock(&devtree_lock);
362 return np;
363}
364EXPORT_SYMBOL(of_find_node_with_property);
365
366/**
332 * of_match_node - Tell if an device_node has a matching of_match structure 367 * of_match_node - Tell if an device_node has a matching of_match structure
333 * @matches: array of of device match structures to search in 368 * @matches: array of of device match structures to search in
334 * @node: the of device structure to match against 369 * @node: the of device structure to match against