dm: core: Add a livetree function to check node status

Add a way to find out if a node is enabled or not, based on its 'status'
property.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2020-11-28 17:50:02 -07:00
parent 734206dda1
commit 0de1b07406
3 changed files with 33 additions and 0 deletions

View File

@ -226,6 +226,16 @@ int ofnode_read_u32_array(ofnode node, const char *propname,
}
}
bool ofnode_is_enabled(ofnode node)
{
if (ofnode_is_np(node)) {
return of_device_is_available(ofnode_to_np(node));
} else {
return fdtdec_get_is_enabled(gd->fdt_blob,
ofnode_to_offset(node));
}
}
ofnode ofnode_first_subnode(ofnode node)
{
assert(ofnode_valid(node));

View File

@ -345,6 +345,17 @@ const char *ofnode_read_string(ofnode node, const char *propname);
*/
int ofnode_read_u32_array(ofnode node, const char *propname,
u32 *out_values, size_t sz);
/**
* ofnode_is_enabled() - Checks whether a node is enabled.
* This looks for a 'status' property. If this exists, then returns true if
* the status is 'okay' and false otherwise. If there is no status property,
* it returns true on the assumption that anything mentioned should be enabled
* by default.
*
* @node: node to examine
* @return false (not enabled) or true (enabled)
*/
bool ofnode_is_enabled(ofnode node);
/**
* ofnode_read_bool() - read a boolean value from a property

View File

@ -249,3 +249,15 @@ static int dm_test_ofnode_get_child_count(struct unit_test_state *uts)
}
DM_TEST(dm_test_ofnode_get_child_count,
UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
static int dm_test_ofnode_is_enabled(struct unit_test_state *uts)
{
ofnode root_node = ofnode_path("/");
ofnode node = ofnode_path("/usb@0");
ut_assert(ofnode_is_enabled(root_node));
ut_assert(!ofnode_is_enabled(node));
return 0;
}
DM_TEST(dm_test_ofnode_is_enabled, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);