summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-07-31 00:52:14 +0300
committerTom Rini <trini@konsulko.com>2022-08-12 15:14:24 +0300
commit55f7990bfeb92c172065d5b53c59d5306cc554ca (patch)
treef032ae3da89230bf5f6365bf37125211d1149e15
parent39e42be12b9456e604ac3e228973b1cb1136864c (diff)
downloadu-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.c15
-rw-r--r--include/dm/ofnode.h10
-rw-r--r--test/dm/ofnode.c16
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);