diff --git a/commands/of_property.c b/commands/of_property.c index 44bb38801..d1a9a17c5 100644 --- a/commands/of_property.c +++ b/commands/of_property.c @@ -212,7 +212,7 @@ static int do_of_property(int argc, char *argv[]) if (optind + 1 < argc) { propname = argv[optind + 1]; - pp = of_find_property(node, propname); + pp = of_find_property(node, propname, NULL); if (!set && !pp) { printf("Cannot find property %s\n", propname); return -ENOENT; diff --git a/drivers/of/base.c b/drivers/of/base.c index 1c9ef58e3..85199b69a 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -102,16 +102,20 @@ static void of_bus_count_cells(struct device_node *dev, of_bus_default_count_cells(dev, addrc, sizec); } -struct property *of_find_property(const struct device_node *node, const char *name) +struct property *of_find_property(const struct device_node *np, + const char *name, int *lenp) { struct property *pp; - if (!node) + if (!np) return NULL; - list_for_each_entry(pp, &node->properties, list) - if (of_prop_cmp(pp->name, name) == 0) + list_for_each_entry(pp, &np->properties, list) + if (of_prop_cmp(pp->name, name) == 0) { + if (lenp) + *lenp = pp->length; return pp; + } return NULL; } @@ -242,7 +246,7 @@ u64 of_translate_address(struct device_node *node, const __be32 *in_addr) return addr; node = node->parent; - p = of_find_property(node, "ranges"); + p = of_find_property(node, "ranges", NULL); if (!p && node->parent) return OF_BAD_ADDR; of_bus_count_cells(node, &na, &nc); @@ -277,13 +281,7 @@ EXPORT_SYMBOL(of_find_node_by_phandle); const void *of_get_property(const struct device_node *np, const char *name, int *lenp) { - struct property *pp = of_find_property(np, name); - - if (!pp) - return NULL; - - if (lenp) - *lenp = pp->length; + struct property *pp = of_find_property(np, name, lenp); return pp ? pp->value : NULL; } @@ -368,7 +366,7 @@ int of_property_read_u32_array(const struct device_node *np, const char *propname, u32 *out_values, size_t sz) { - struct property *prop = of_find_property(np, propname); + struct property *prop = of_find_property(np, propname, NULL); const __be32 *val; if (!prop) @@ -404,7 +402,7 @@ int of_property_write_u32_array(struct device_node *np, const char *propname, const u32 *values, size_t sz) { - struct property *prop = of_find_property(np, propname); + struct property *prop = of_find_property(np, propname, NULL); __be32 *val; if (!prop) @@ -619,7 +617,7 @@ EXPORT_SYMBOL(of_find_node_by_path); int of_property_read_string(struct device_node *np, const char *propname, const char **out_string) { - struct property *prop = of_find_property(np, propname); + struct property *prop = of_find_property(np, propname, NULL); if (!prop) return -EINVAL; if (!prop->value) @@ -652,7 +650,7 @@ EXPORT_SYMBOL_GPL(of_property_read_string); int of_property_read_string_index(struct device_node *np, const char *propname, int index, const char **output) { - struct property *prop = of_find_property(np, propname); + struct property *prop = of_find_property(np, propname, NULL); int i = 0; size_t l = 0, total = 0; const char *p; @@ -725,7 +723,7 @@ static int of_node_disabled(struct device_node *node) { struct property *p; - p = of_find_property(node, "status"); + p = of_find_property(node, "status", NULL); if (p) { if (!strcmp("disabled", p->value)) return 1; @@ -833,7 +831,7 @@ int of_set_property(struct device_node *np, const char *name, const void *val, i if (!np) return -ENOENT; - pp = of_find_property(np, name); + pp = of_find_property(np, name, NULL); if (pp) { void *data; @@ -1278,11 +1276,11 @@ int of_add_initrd(struct device_node *root, resource_size_t start, } else { struct property *pp; - pp = of_find_property(chosen, "linux,initrd-start"); + pp = of_find_property(chosen, "linux,initrd-start", NULL); if (pp) of_delete_property(pp); - pp = of_find_property(chosen, "linux,initrd-end"); + pp = of_find_property(chosen, "linux,initrd-end", NULL); if (pp) of_delete_property(pp); } diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index a3ec576d5..a76396e89 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -178,7 +178,10 @@ struct device_node *of_unflatten_dtb(struct device_node *root, void *infdt) goto err; } - if (merge && (p = of_find_property(node, name))) { + p = NULL; + if (merge) + p = of_find_property(node, name, NULL); + if (merge && p) { free(p->value); p->value = xzalloc(len); memcpy(p->value, nodep, len); diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c index de93fbc55..2bf05e2ba 100644 --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c @@ -76,15 +76,15 @@ const void *of_get_mac_address(struct device_node *np) { struct property *pp; - pp = of_find_property(np, "mac-address"); + pp = of_find_property(np, "mac-address", NULL); if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) return pp->value; - pp = of_find_property(np, "local-mac-address"); + pp = of_find_property(np, "local-mac-address", NULL); if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) return pp->value; - pp = of_find_property(np, "address"); + pp = of_find_property(np, "address", NULL); if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) return pp->value; diff --git a/drivers/pinctrl/pinctrl.c b/drivers/pinctrl/pinctrl.c index fa979a1b7..7c797d35b 100644 --- a/drivers/pinctrl/pinctrl.c +++ b/drivers/pinctrl/pinctrl.c @@ -64,14 +64,14 @@ int pinctrl_select_state(struct device_d *dev, const char *name) if (!np) return 0; - if (!of_find_property(np, "pinctrl-0")) + if (!of_find_property(np, "pinctrl-0", NULL)) return 0; /* For each defined state ID */ for (state = 0; ; state++) { /* Retrieve the pinctrl-* property */ propname = asprintf("pinctrl-%d", state); - prop = of_find_property(np, propname); + prop = of_find_property(np, propname, NULL); free(propname); if (!prop) { diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index f460a7a69..eebf64c98 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -112,17 +112,17 @@ void spi_of_register_slaves(struct spi_master *master, struct device_node *node) chip.name = xstrdup(n->name); chip.bus_num = master->bus_num; /* Mode (clock phase/polarity/etc.) */ - if (of_find_property(n, "spi-cpha")) + if (of_find_property(n, "spi-cpha", NULL)) chip.mode |= SPI_CPHA; - if (of_find_property(n, "spi-cpol")) + if (of_find_property(n, "spi-cpol", NULL)) chip.mode |= SPI_CPOL; - if (of_find_property(n, "spi-cs-high")) + if (of_find_property(n, "spi-cs-high", NULL)) chip.mode |= SPI_CS_HIGH; - if (of_find_property(n, "spi-3wire")) + if (of_find_property(n, "spi-3wire", NULL)) chip.mode |= SPI_3WIRE; of_property_read_u32(n, "spi-max-frequency", &chip.max_speed_hz); - reg = of_find_property(n, "reg"); + reg = of_find_property(n, "reg", NULL); if (!reg) continue; chip.chip_select = of_read_number(reg->value, 1); diff --git a/drivers/usb/imx/chipidea-imx.c b/drivers/usb/imx/chipidea-imx.c index 4ee76101f..c552b4e32 100644 --- a/drivers/usb/imx/chipidea-imx.c +++ b/drivers/usb/imx/chipidea-imx.c @@ -108,7 +108,8 @@ static int imx_chipidea_probe_dt(struct imx_chipidea *ci) return -EINVAL; } - if (of_find_property(ci->dev->device_node, "disable-over-current")) + if (of_find_property(ci->dev->device_node, + "disable-over-current", NULL)) ci->flags |= MXC_EHCI_DISABLE_OVERCURRENT; return 0; diff --git a/include/of.h b/include/of.h index a91a4c960..7ebde62c7 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 property *of_find_property(const struct device_node *node, const char *name); - 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); @@ -183,6 +181,9 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches, struct cdev; #ifdef CONFIG_OFTREE +extern struct property *of_find_property(const struct device_node *np, + const char *name, int *lenp); + 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); @@ -227,6 +228,13 @@ static inline struct device_node *of_get_root_node(void) return NULL; } +static inline struct property *of_find_property(const struct device_node *np, + const char *name, + int *lenp) +{ + return NULL; +} + static inline void of_alias_scan(void) { }