dm: core: Provide ofnode_find_subnode_unit()
The ofnode_find_subnode() function currently processes things two different ways, so the treatment of unit addresses differs depending on whether OF_LIVE is enabled or not. Add a new version which uses the ofnode API and add a test to check that unit addresses can be matched correctly. Leave the old function in place for the !OF_LIVE case, to avoid a code-size increase, e.g. on firefly-rk3288 Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -599,14 +599,9 @@ ofnode ofnode_find_subnode(ofnode node, const char *subnode_name)
|
||||
log_debug("%s: %s: ", __func__, subnode_name);
|
||||
|
||||
if (ofnode_is_np(node)) {
|
||||
struct device_node *np = ofnode_to_np(node);
|
||||
|
||||
for (np = np->child; np; np = np->sibling) {
|
||||
if (!strcmp(subnode_name, np->name))
|
||||
break;
|
||||
}
|
||||
subnode = np_to_ofnode(np);
|
||||
subnode = ofnode_find_subnode_unit(node, subnode_name);
|
||||
} else {
|
||||
/* special case to avoid code-size increase */
|
||||
int ooffset = fdt_subnode_offset(ofnode_to_fdt(node),
|
||||
ofnode_to_offset(node), subnode_name);
|
||||
subnode = noffset_to_ofnode(node, ooffset);
|
||||
@@ -617,6 +612,26 @@ ofnode ofnode_find_subnode(ofnode node, const char *subnode_name)
|
||||
return subnode;
|
||||
}
|
||||
|
||||
ofnode ofnode_find_subnode_unit(ofnode node, const char *subnode_name)
|
||||
{
|
||||
ofnode subnode, found = ofnode_null();
|
||||
|
||||
assert(ofnode_valid(node));
|
||||
log_debug("%s: ", subnode_name);
|
||||
|
||||
ofnode_for_each_subnode(subnode, node) {
|
||||
if (ofnode_name_eq_unit(subnode, subnode_name)) {
|
||||
found = subnode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
log_debug("%s\n", ofnode_valid(found) ?
|
||||
ofnode_get_name(found) : "<none>");
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
int ofnode_read_u32_array(ofnode node, const char *propname,
|
||||
u32 *out_values, size_t sz)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user