diff options
author | Simon Glass <sjg@chromium.org> | 2022-07-31 00:52:14 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-08-12 15:14:24 +0300 |
commit | 55f7990bfeb92c172065d5b53c59d5306cc554ca (patch) | |
tree | f032ae3da89230bf5f6365bf37125211d1149e15 | |
parent | 39e42be12b9456e604ac3e228973b1cb1136864c (diff) | |
download | u-boot-55f7990bfeb92c172065d5b53c59d5306cc554ca.tar.xz |
dm: core: Add support for writing u32 with ofnode
Add a new function to write an integer to an ofnode (live tree or
flat tree).
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | drivers/core/ofnode.c | 15 | ||||
-rw-r--r-- | include/dm/ofnode.h | 10 | ||||
-rw-r--r-- | test/dm/ofnode.c | 16 |
3 files changed, 41 insertions, 0 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index b7a55589a1..45ea84e9fb 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -1126,6 +1126,21 @@ int ofnode_write_string(ofnode node, const char *propname, const char *value) return ofnode_write_prop(node, propname, value, strlen(value) + 1); } +int ofnode_write_u32(ofnode node, const char *propname, u32 value) +{ + fdt32_t *val; + + assert(ofnode_valid(node)); + + log_debug("%s = %x", propname, value); + val = malloc(sizeof(*val)); + if (!val) + return -ENOMEM; + *val = cpu_to_fdt32(value); + + return ofnode_write_prop(node, propname, val, sizeof(value)); +} + int ofnode_set_enabled(ofnode node, bool value) { assert(ofnode_valid(node)); diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 16c8890b09..7ce1e4c6d9 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -1155,6 +1155,16 @@ int ofnode_write_prop(ofnode node, const char *propname, const void *value, int ofnode_write_string(ofnode node, const char *propname, const char *value); /** + * ofnode_write_u32() - Set an integer property of an ofnode + * + * @node: The node for whose string property should be set + * @propname: The name of the string property to set + * @value: The new value of the 32-bit integer property + * Return: 0 if successful, -ve on error + */ +int ofnode_write_u32(ofnode node, const char *propname, u32 value); + +/** * ofnode_set_enabled() - Enable or disable a device tree node given by its * ofnode * diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index bd598d23e4..f80993f892 100644 --- a/test/dm/ofnode.c +++ b/test/dm/ofnode.c @@ -585,3 +585,19 @@ static int dm_test_ofnode_livetree_writing(struct unit_test_state *uts) } DM_TEST(dm_test_ofnode_livetree_writing, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT | UT_TESTF_LIVE_OR_FLAT); + +static int dm_test_ofnode_u32(struct unit_test_state *uts) +{ + ofnode node; + + node = ofnode_path("/lcd"); + ut_assert(ofnode_valid(node)); + ut_asserteq(1366, ofnode_read_u32_default(node, "xres", 123)); + ut_assertok(ofnode_write_u32(node, "xres", 1367)); + ut_asserteq(1367, ofnode_read_u32_default(node, "xres", 123)); + ut_assertok(ofnode_write_u32(node, "xres", 1366)); + + return 0; +} +DM_TEST(dm_test_ofnode_u32, + UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT | UT_TESTF_LIVE_OR_FLAT); |