diff options
author | Jan Weitzel <j.weitzel@phytec.de> | 2014-01-06 13:45:43 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-01-10 10:39:57 +0100 |
commit | 1ebf5ff0c18a44c968533bc47d9f26215ffb779d (patch) | |
tree | 43a18148d96edf7db51df50d2c4e6c4179b6380c /drivers | |
parent | d95f27aaa83381ce210d3b285ad2647ce0313bbb (diff) | |
download | barebox-1ebf5ff0c18a44c968533bc47d9f26215ffb779d.tar.gz barebox-1ebf5ff0c18a44c968533bc47d9f26215ffb779d.tar.xz |
of: find also nodes by mixture of alias and path
Let of_find_node_by_path_or_alias also find a node starting with an alias
followed by a path like "i2c0/tps@24"
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/of/base.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index ea2d879be4..6e5e7d6e76 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -1378,11 +1378,32 @@ EXPORT_SYMBOL(of_find_node_by_path); struct device_node *of_find_node_by_path_or_alias(struct device_node *root, const char *str) { + struct device_node *node; + const char *slash; + char *alias; + size_t len = 0; + if (*str == '/') return of_find_node_by_path_from(root, str); - else + + slash = strchr(str, '/'); + + if (!slash) return of_find_node_by_alias(root, str); + len = slash - str + 1; + alias = xmalloc(len); + strlcpy(alias, str, len); + + node = of_find_node_by_alias(root, alias); + + if (!node) + goto out; + + node = of_find_node_by_path_from(node, slash); +out: + free(alias); + return node; } EXPORT_SYMBOL(of_find_node_by_path_or_alias); |