mirror of
https://xff.cz/git/u-boot/
synced 2025-10-28 17:13:38 +01: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:
committed by
Tom Rini
parent
719cab6d2e
commit
ce891fcada
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user