mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 00:49:43 +00:00
dm: core: Support writing a boolean
Add functions to write a boolean property. This involves deleting it if the value is false. Add a new ofnode_has_property() as well. Add a comment about the behaviour of of_read_property() when the property value is empty. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
62b1db3377
commit
d9216c8683
3 changed files with 90 additions and 3 deletions
|
@ -491,12 +491,12 @@ u64 ofnode_read_u64_default(ofnode node, const char *propname, u64 def)
|
|||
|
||||
bool ofnode_read_bool(ofnode node, const char *propname)
|
||||
{
|
||||
const void *prop;
|
||||
bool prop;
|
||||
|
||||
assert(ofnode_valid(node));
|
||||
debug("%s: %s: ", __func__, propname);
|
||||
|
||||
prop = ofnode_get_property(node, propname, NULL);
|
||||
prop = ofnode_has_property(node, propname);
|
||||
|
||||
debug("%s\n", prop ? "true" : "false");
|
||||
|
||||
|
@ -1168,6 +1168,14 @@ const void *ofnode_get_property(ofnode node, const char *propname, int *lenp)
|
|||
propname, lenp);
|
||||
}
|
||||
|
||||
bool ofnode_has_property(ofnode node, const char *propname)
|
||||
{
|
||||
if (ofnode_is_np(node))
|
||||
return of_find_property(ofnode_to_np(node), propname, NULL);
|
||||
else
|
||||
return ofnode_get_property(node, propname, NULL);
|
||||
}
|
||||
|
||||
int ofnode_first_property(ofnode node, struct ofprop *prop)
|
||||
{
|
||||
prop->node = node;
|
||||
|
@ -1616,6 +1624,30 @@ int ofnode_write_u32(ofnode node, const char *propname, u32 value)
|
|||
return ofnode_write_prop(node, propname, val, sizeof(value), false);
|
||||
}
|
||||
|
||||
int ofnode_write_bool(ofnode node, const char *propname, bool value)
|
||||
{
|
||||
if (value)
|
||||
return ofnode_write_prop(node, propname, NULL, 0, false);
|
||||
else
|
||||
return ofnode_delete_prop(node, propname);
|
||||
}
|
||||
|
||||
int ofnode_delete_prop(ofnode node, const char *propname)
|
||||
{
|
||||
if (ofnode_is_np(node)) {
|
||||
struct property *prop;
|
||||
int len;
|
||||
|
||||
prop = of_find_property(ofnode_to_np(node), propname, &len);
|
||||
if (prop)
|
||||
return of_remove_property(ofnode_to_np(node), prop);
|
||||
return 0;
|
||||
} else {
|
||||
return fdt_delprop(ofnode_to_fdt(node), ofnode_to_offset(node),
|
||||
propname);
|
||||
}
|
||||
}
|
||||
|
||||
int ofnode_set_enabled(ofnode node, bool value)
|
||||
{
|
||||
assert(ofnode_valid(node));
|
||||
|
|
|
@ -1037,10 +1037,19 @@ int ofnode_decode_panel_timing(ofnode node,
|
|||
* @node: node to read
|
||||
* @propname: property to read
|
||||
* @lenp: place to put length on success
|
||||
* Return: pointer to property, or NULL if not found
|
||||
* Return: pointer to property value, or NULL if not found or empty
|
||||
*/
|
||||
const void *ofnode_get_property(ofnode node, const char *propname, int *lenp);
|
||||
|
||||
/**
|
||||
* ofnode_has_property() - check if a node has a named property
|
||||
*
|
||||
* @node: node to read
|
||||
* @propname: property to read
|
||||
* Return: true if the property exists in the node, false if not
|
||||
*/
|
||||
bool ofnode_has_property(ofnode node, const char *propname);
|
||||
|
||||
/**
|
||||
* ofnode_first_property()- get the reference of the first property
|
||||
*
|
||||
|
@ -1452,6 +1461,27 @@ int ofnode_write_string(ofnode node, const char *propname, const char *value);
|
|||
*/
|
||||
int ofnode_write_u32(ofnode node, const char *propname, u32 value);
|
||||
|
||||
/**
|
||||
* ofnode_write_bool() - Set a boolean property of an ofnode
|
||||
*
|
||||
* This either adds or deleted a property with a zero-length value
|
||||
*
|
||||
* @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 boolean property
|
||||
* Return: 0 if successful, -ve on error
|
||||
*/
|
||||
int ofnode_write_bool(ofnode node, const char *propname, bool value);
|
||||
|
||||
/**
|
||||
* ofnode_delete_prop() - Delete a property
|
||||
*
|
||||
* @node: Node containing the property to delete
|
||||
* @propname: Name of property to delete
|
||||
* Return: 0 if successful, -ve on error
|
||||
*/
|
||||
int ofnode_delete_prop(ofnode node, const char *propname);
|
||||
|
||||
/**
|
||||
* ofnode_set_enabled() - Enable or disable a device tree node given by its
|
||||
* ofnode
|
||||
|
|
|
@ -1480,3 +1480,28 @@ static int dm_test_oftree_to_fdt(struct unit_test_state *uts)
|
|||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_oftree_to_fdt, UT_TESTF_SCAN_FDT);
|
||||
|
||||
/* test ofnode_read_bool() and ofnode_write_bool() */
|
||||
static int dm_test_bool(struct unit_test_state *uts)
|
||||
{
|
||||
const char *propname = "missing-bool-value";
|
||||
ofnode node;
|
||||
|
||||
node = ofnode_path("/a-test");
|
||||
ut_assert(ofnode_read_bool(node, "bool-value"));
|
||||
ut_assert(!ofnode_read_bool(node, propname));
|
||||
ut_assert(!ofnode_has_property(node, propname));
|
||||
|
||||
ut_assertok(ofnode_write_bool(node, propname, true));
|
||||
ut_assert(ofnode_read_bool(node, propname));
|
||||
ut_assert(ofnode_has_property(node, propname));
|
||||
ut_assert(ofnode_read_bool(node, "bool-value"));
|
||||
|
||||
ut_assertok(ofnode_write_bool(node, propname, false));
|
||||
ut_assert(!ofnode_read_bool(node, propname));
|
||||
ut_assert(!ofnode_has_property(node, propname));
|
||||
ut_assert(ofnode_read_bool(node, "bool-value"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_bool, UT_TESTF_SCAN_FDT);
|
||||
|
|
Loading…
Reference in a new issue