Hello. On 05-05-2011 21:02, David Daney wrote:
Currently all paths passed to of_find_node_by_path() must begin with a '/', indicating a full path to the desired node.
Augment the look-up code so that if a path does *not* begin with '/', the path is used as the name of an /aliases property. The value of this alias is then used as the full node path to be found.
Signed-off-by: David Daney<ddaney@xxxxxxxxxxxxxxxxxx> --- drivers/of/base.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 40 insertions(+), 1 deletions(-)
diff --git a/drivers/of/base.c b/drivers/of/base.c index 632ebae..1a0a83e 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c
[...]
@@ -348,14 +351,50 @@ EXPORT_SYMBOL(of_get_next_child); struct device_node *of_find_node_by_path(const char *path) { struct device_node *np = allnodes; + struct device_node *aliases = NULL; + char *alias = NULL; + char *new_path = NULL; read_lock(&devtree_lock); + + if (path[0] != '/') { + const char *ps; + aliases = of_find_node_by_path("/aliases"); + if (!aliases) + goto out; + + ps = strchr(path, '/'); + if (ps) { + size_t len = ps - path; + alias = kmalloc(len + 1, GFP_KERNEL); + strncpy(alias, path, len); + alias[len] = 0;
BTW, you could use kstrndup() (from mm/util.c) instead of the above 3 lines. WBR, Sergei