mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
dm: core: add ofnode and dev function to iterate on node property
Add functions to iterate on all property with livetree - dev_read_first_prop - dev_read_next_prop - dev_read_prop_by_prop and - ofnode_get_first_property - ofnode_get_next_property - ofnode_get_property_by_prop And helper: dev_for_each_property For example: struct ofprop property; dev_for_each_property(property, config) { value = dev_read_prop_by_prop(&property, &propname, &len); or: for (res = ofnode_get_first_property(node, &property); !res; res = ofnode_get_next_property(&property)) { value = ofnode_get_property_by_prop(&property, &propname, &len); .... } Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
719cab6d2e
commit
ce891fcada
8 changed files with 317 additions and 2 deletions
|
@ -571,6 +571,54 @@ const void *ofnode_get_property(ofnode node, const char *propname, int *lenp)
|
|||
propname, lenp);
|
||||
}
|
||||
|
||||
int ofnode_get_first_property(ofnode node, struct ofprop *prop)
|
||||
{
|
||||
prop->node = node;
|
||||
|
||||
if (ofnode_is_np(node)) {
|
||||
prop->prop = of_get_first_property(ofnode_to_np(prop->node));
|
||||
if (!prop->prop)
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
} else {
|
||||
prop->offset =
|
||||
fdt_first_property_offset(gd->fdt_blob,
|
||||
ofnode_to_offset(prop->node));
|
||||
if (prop->offset < 0)
|
||||
return prop->offset;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ofnode_get_next_property(struct ofprop *prop)
|
||||
{
|
||||
if (ofnode_is_np(prop->node)) {
|
||||
prop->prop = of_get_next_property(ofnode_to_np(prop->node),
|
||||
prop->prop);
|
||||
if (!prop->prop)
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
} else {
|
||||
prop->offset = fdt_next_property_offset(gd->fdt_blob,
|
||||
prop->offset);
|
||||
if (prop->offset < 0)
|
||||
return prop->offset;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const void *ofnode_get_property_by_prop(const struct ofprop *prop,
|
||||
const char **propname, int *lenp)
|
||||
{
|
||||
if (ofnode_is_np(prop->node))
|
||||
return of_get_property_by_prop(ofnode_to_np(prop->node),
|
||||
prop->prop, propname, lenp);
|
||||
else
|
||||
return fdt_getprop_by_offset(gd->fdt_blob,
|
||||
prop->offset,
|
||||
propname, lenp);
|
||||
}
|
||||
|
||||
bool ofnode_is_available(ofnode node)
|
||||
{
|
||||
if (ofnode_is_np(node))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue