diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2018-08-20 11:09:58 +0200 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2018-09-18 08:12:21 -0600 |
commit | 61fba0faba432ae1cefc3984f863c28880d30329 (patch) | |
tree | e55b6dd9e140132a6ed6c913c14251df0ffcb21c /drivers/core/of_access.c | |
parent | 427ddd84204cc0693e3f80f90f257b3d24b04307 (diff) | |
download | u-boot-61fba0faba432ae1cefc3984f863c28880d30329.zip u-boot-61fba0faba432ae1cefc3984f863c28880d30329.tar.gz u-boot-61fba0faba432ae1cefc3984f863c28880d30329.tar.bz2 |
ofnode: add ofnode_by_prop_value()
Adds ofnode_by_prop_value() to search for nodes with a given property
and value, an ofnode version of fdt_node_offset_by_prop_value().
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core/of_access.c')
-rw-r--r-- | drivers/core/of_access.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c index 0729dfc..14c020a 100644 --- a/drivers/core/of_access.c +++ b/drivers/core/of_access.c @@ -376,6 +376,33 @@ struct device_node *of_find_compatible_node(struct device_node *from, return np; } +static int of_device_has_prop_value(const struct device_node *device, + const char *propname, const void *propval, + int proplen) +{ + struct property *prop = of_find_property(device, propname, NULL); + + if (!prop || !prop->value || prop->length != proplen) + return 0; + return !memcmp(prop->value, propval, proplen); +} + +struct device_node *of_find_node_by_prop_value(struct device_node *from, + const char *propname, + const void *propval, int proplen) +{ + struct device_node *np; + + for_each_of_allnodes_from(from, np) { + if (of_device_has_prop_value(np, propname, propval, proplen) && + of_node_get(np)) + break; + } + of_node_put(from); + + return np; +} + struct device_node *of_find_node_by_phandle(phandle handle) { struct device_node *np; |