diff options
-rw-r--r-- | arch/arm/boards/highbank/init.c | 4 | ||||
-rw-r--r-- | arch/ppc/mach-mpc5xxx/cpu.c | 4 | ||||
-rw-r--r-- | commands/of_node.c | 2 | ||||
-rw-r--r-- | commands/of_property.c | 10 | ||||
-rw-r--r-- | commands/oftree.c | 11 | ||||
-rw-r--r-- | common/oftree.c | 2 | ||||
-rw-r--r-- | drivers/of/base.c | 43 | ||||
-rw-r--r-- | include/of.h | 17 |
8 files changed, 51 insertions, 42 deletions
diff --git a/arch/arm/boards/highbank/init.c b/arch/arm/boards/highbank/init.c index d4a5c5acc3..1aa713b163 100644 --- a/arch/arm/boards/highbank/init.c +++ b/arch/arm/boards/highbank/init.c @@ -53,7 +53,7 @@ static int hb_fixup(struct device_node *root) if ((opp_table[0] >> 16) != HB_OPP_VERSION) return 0; - node = of_find_node_by_path(root, "/cpus/cpu@0"); + node = of_find_node_by_path("/cpus/cpu@0"); if (!node) return 0; @@ -89,7 +89,7 @@ static int highbank_mem_init(void) of_set_root_node(root); - np = of_find_node_by_path(root, "/memory"); + np = of_find_node_by_path("/memory"); if (!np) { pr_warn("no memory node use default configuration\n"); goto not_found; diff --git a/arch/ppc/mach-mpc5xxx/cpu.c b/arch/ppc/mach-mpc5xxx/cpu.c index 99f16ebf1d..0ece4a9ed9 100644 --- a/arch/ppc/mach-mpc5xxx/cpu.c +++ b/arch/ppc/mach-mpc5xxx/cpu.c @@ -83,7 +83,7 @@ static int of_mpc5200_fixup(struct device_node *root) int div = in_8((void*)CFG_MBAR + 0x204) & 0x0020 ? 8 : 4; - node = of_find_node_by_path(root, "/cpus/PowerPC,5200@0"); + node = of_find_node_by_path("/cpus/PowerPC,5200@0"); if (!node) return -EINVAL; @@ -91,7 +91,7 @@ static int of_mpc5200_fixup(struct device_node *root) of_property_write_u32(node, "bus-frequency", get_bus_clock()); of_property_write_u32(node, "clock-frequency", get_cpu_clock()); - node = of_find_node_by_path(root, "/soc5200@f0000000"); + node = of_find_node_by_path("/soc5200@f0000000"); if (!node) return -EINVAL; diff --git a/commands/of_node.c b/commands/of_node.c index 0249d9725b..e60ef66d38 100644 --- a/commands/of_node.c +++ b/commands/of_node.c @@ -81,7 +81,7 @@ static int do_of_node(int argc, char *argv[]) if (!path) return COMMAND_ERROR_USAGE; - node = of_find_node_by_path(root, path); + node = of_find_node_by_path(path); if (!node) { printf("Cannot find nodepath %s\n", path); return -ENOENT; diff --git a/commands/of_property.c b/commands/of_property.c index d1a9a17c55..8ffe30b25f 100644 --- a/commands/of_property.c +++ b/commands/of_property.c @@ -175,7 +175,7 @@ static int do_of_property(int argc, char *argv[]) int set = 0; int ret; char *path = NULL, *propname = NULL; - struct device_node *root, *node = NULL; + struct device_node *node = NULL; struct property *pp = NULL; while ((opt = getopt(argc, argv, "ds")) > 0) { @@ -194,15 +194,9 @@ static int do_of_property(int argc, char *argv[]) if (optind == argc) return COMMAND_ERROR_USAGE; - root = of_get_root_node(); - if (!root) { - printf("root node not set\n"); - return -ENOENT; - } - if (optind < argc) { path = argv[optind]; - node = of_find_node_by_path(root, path); + node = of_find_node_by_path(path); if (!node) { printf("Cannot find nodepath %s\n", path); return -ENOENT; diff --git a/commands/oftree.c b/commands/oftree.c index 468235a043..914951735b 100644 --- a/commands/oftree.c +++ b/commands/oftree.c @@ -164,16 +164,7 @@ static int do_oftree(int argc, char *argv[]) of_print_nodes(root, 0); of_free(root); } else { - struct device_node *root, *n; - - root = of_get_root_node(); - if (!root) { - ret = -ENOENT; - goto out; - } - - n = of_find_node_by_path(root, node); - + struct device_node *n = of_find_node_by_path(node); if (!n) { ret = -ENOENT; goto out; diff --git a/common/oftree.c b/common/oftree.c index 475d418849..aff4c28852 100644 --- a/common/oftree.c +++ b/common/oftree.c @@ -100,7 +100,7 @@ void of_print_property(const void *data, int len) void of_print_cmdline(struct device_node *root) { - struct device_node *node = of_find_node_by_path(root, "/chosen"); + struct device_node *node = of_find_node_by_path("/chosen"); const char *cmdline; if (!node) { diff --git a/drivers/of/base.c b/drivers/of/base.c index 85199b69ab..a99fa43f20 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -153,7 +153,7 @@ void of_alias_scan(void) if (!root_node) return; - of_aliases = of_find_node_by_path(root_node, "/aliases"); + of_aliases = of_find_node_by_path("/aliases"); if (!of_aliases) return; @@ -170,7 +170,7 @@ void of_alias_scan(void) !of_prop_cmp(pp->name, "linux,phandle")) continue; - np = of_find_node_by_path(root_node, pp->value); + np = of_find_node_by_path(pp->value); if (!np) continue; @@ -556,19 +556,18 @@ int of_machine_is_compatible(const char *compat) EXPORT_SYMBOL(of_machine_is_compatible); /** - * of_find_node_by_path - Find a node matching a full OF path - * @root: The root node of this tree + * of_find_node_by_path_from - Find a node matching a full OF path + * relative to a given root node. * @path: The full path to match * - * Returns a node pointer with refcount incremented, use - * of_node_put() on it when done. + * Returns a pointer to the node found or NULL. */ -struct device_node *of_find_node_by_path(struct device_node *root, const char *path) +struct device_node *of_find_node_by_path_from(struct device_node *from, + const char *path) { char *slash, *p, *freep; - struct device_node *dn = root; - if (*path != '/') + if (!from || !path || *path != '/') return NULL; path++; @@ -583,8 +582,8 @@ struct device_node *of_find_node_by_path(struct device_node *root, const char *p if (slash) *slash = 0; - dn = of_find_child_by_name(dn, p); - if (!dn) + from = of_find_child_by_name(from, p); + if (!from) goto out; if (!slash) @@ -595,7 +594,19 @@ struct device_node *of_find_node_by_path(struct device_node *root, const char *p out: free(freep); - return dn; + return from; +} +EXPORT_SYMBOL(of_find_node_by_path_from); + +/** + * of_find_node_by_path - Find a node matching a full OF path + * @path: The full path to match + * + * Returns a pointer to the node found or NULL. + */ +struct device_node *of_find_node_by_path(const char *path) +{ + return of_find_node_by_path_from(root_node, path); } EXPORT_SYMBOL(of_find_node_by_path); @@ -1156,12 +1167,12 @@ int of_probe(void) if(!root_node) return -ENODEV; - of_chosen = of_find_node_by_path(root_node, "/chosen"); + of_chosen = of_find_node_by_path("/chosen"); of_property_read_string(root_node, "model", &of_model); __of_parse_phandles(root_node); - memory = of_find_node_by_path(root_node, "/memory"); + memory = of_find_node_by_path("/memory"); if (memory) of_add_memory(memory, false); @@ -1234,8 +1245,8 @@ int of_device_is_stdout_path(struct device_d *dev) name = of_get_property(of_chosen, "linux,stdout-path", NULL); if (name == NULL) return 0; - dn = of_find_node_by_path(root_node, name); + dn = of_find_node_by_path(name); if (!dn) return 0; @@ -1264,7 +1275,7 @@ int of_add_initrd(struct device_node *root, resource_size_t start, struct device_node *chosen; __be32 buf[2]; - chosen = of_find_node_by_path(root, "/chosen"); + chosen = of_find_node_by_path("/chosen"); if (!chosen) return -EINVAL; diff --git a/include/of.h b/include/of.h index 7ebde62c7f..a56587f532 100644 --- a/include/of.h +++ b/include/of.h @@ -67,8 +67,6 @@ int of_add_initrd(struct device_node *root, resource_size_t start, int of_n_addr_cells(struct device_node *np); int of_n_size_cells(struct device_node *np); -struct device_node *of_find_node_by_path(struct device_node *root, const char *path); - struct device_node *of_find_child_by_name(struct device_node *node, const char *name); struct fdt_header *fdt_get_tree(void); @@ -184,6 +182,10 @@ struct cdev; extern struct property *of_find_property(const struct device_node *np, const char *name, int *lenp); +extern struct device_node *of_find_node_by_path_from(struct device_node *from, + const char *path); +extern struct device_node *of_find_node_by_path(const char *path); + extern void of_alias_scan(void); extern int of_alias_get_id(struct device_node *np, const char *stem); extern const char *of_alias_get(struct device_node *np); @@ -235,6 +237,17 @@ static inline struct property *of_find_property(const struct device_node *np, return NULL; } +static inline struct device_node *of_find_node_by_path_from( + struct device_node *from, const char *path) +{ + return NULL; +} + +static inline struct device_node *of_find_node_by_path(const char *path) +{ + return NULL; +} + static inline void of_alias_scan(void) { } |