diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 98f4b539ea..dd6d57c49b 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -165,6 +165,20 @@ ofnode ofnode_next_subnode(ofnode node) fdt_next_subnode(gd->fdt_blob, ofnode_to_offset(node))); } +ofnode ofnode_get_parent(ofnode node) +{ + ofnode parent; + + assert(ofnode_valid(node)); + if (ofnode_is_np(node)) + parent = np_to_ofnode(of_get_parent(ofnode_to_np(node))); + else + parent.of_offset = fdt_parent_offset(gd->fdt_blob, + ofnode_to_offset(node)); + + return parent; +} + const char *ofnode_get_name(ofnode node) { assert(ofnode_valid(node)); diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index c359a60f95..6938e62993 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -301,6 +301,14 @@ ofnode ofnode_first_subnode(ofnode node); */ ofnode ofnode_next_subnode(ofnode node); +/** + * ofnode_get_parent() - get the ofnode's parent (enclosing ofnode) + * + * @node: valid node to look up + * @return ofnode reference of the parent node + */ +ofnode ofnode_get_parent(ofnode node); + /** * ofnode_get_name() - get the name of a node *