diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2007-09-06 09:46:17 -0600 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2007-09-06 09:46:17 -0600 |
commit | 41bb76e941929f54a73206fb132f7a4c275543a3 (patch) | |
tree | 29e48be90ffb053f8ead77e4a95f8474cd04c967 | |
parent | 60174746c668b309378a91488dded898e9553eae (diff) |
libfdt: add convenience function fdt_find_and_setprop()
Given the path to a node, fdt_find_and_setprop() allows a property value
to be set directly.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
-rw-r--r-- | include/libfdt.h | 2 | ||||
-rw-r--r-- | libfdt/fdt_rw.c | 26 |
2 files changed, 28 insertions, 0 deletions
diff --git a/include/libfdt.h b/include/libfdt.h index 340e89d9ce..38c65a9899 100644 --- a/include/libfdt.h +++ b/include/libfdt.h @@ -140,6 +140,8 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, }) #define fdt_setprop_string(fdt, nodeoffset, name, str) \ fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) +int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, + const void *val, int len, int create); int fdt_delprop(void *fdt, int nodeoffset, const char *name); int fdt_add_subnode_namelen(void *fdt, int parentoffset, const char *name, int namelen); diff --git a/libfdt/fdt_rw.c b/libfdt/fdt_rw.c index 693bfe43a2..55fcc41d1a 100644 --- a/libfdt/fdt_rw.c +++ b/libfdt/fdt_rw.c @@ -188,6 +188,32 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, return 0; } +/** + * fdt_find_and_setprop: Find a node and set it's property + * + * @fdt: ptr to device tree + * @node: path of node + * @prop: property name + * @val: ptr to new value + * @len: length of new property value + * @create: flag to create the property if it doesn't exist + * + * Convenience function to directly set a property given the path to the node. + */ +int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, + const void *val, int len, int create) +{ + int nodeoff = fdt_find_node_by_path(fdt, node); + + if (nodeoff < 0) + return nodeoff; + + if ((!create) && (fdt_get_property(fdt, nodeoff, prop, 0) == NULL)) + return 0; /* create flag not set; so exit quietly */ + + return fdt_setprop(fdt, nodeoff, prop, val, len); +} + int fdt_delprop(void *fdt, int nodeoffset, const char *name) { struct fdt_property *prop; |