On Monday, March 06, 2017 04:19:29 PM Sakari Ailus wrote: > In order to differentiate the functionality between dropping a reference > to the node (or not) for the benefit of OF, introduce > fwnode_get_next_parent(). > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > --- > drivers/base/property.c | 29 +++++++++++++++++++++++++++++ > include/linux/property.h | 1 + > 2 files changed, 30 insertions(+) > > diff --git a/drivers/base/property.c b/drivers/base/property.c > index b8c1017..defeba9 100644 > --- a/drivers/base/property.c > +++ b/drivers/base/property.c > @@ -953,6 +953,35 @@ int device_add_properties(struct device *dev, > EXPORT_SYMBOL_GPL(device_add_properties); > > /** > + * fwnode_get_next_parent - Iterate to the node's parent > + * @fwnode: Firmware whose parent is retrieved > + * > + * This is like fwnode_get_parent() except that it drops the refcount > + * on the passed node, making it suitable for iterating through a > + * node's parents. > + * > + * Returns a node pointer with refcount incremented, use > + * fwnode_handle_node() on it when done. > + */ > +struct fwnode_handle *fwnode_get_next_parent(struct fwnode_handle *fwnode) > +{ > + struct fwnode_handle *parent = NULL; > + > + if (is_of_node(fwnode)) { > + struct device_node *node; > + > + node = of_get_next_parent(to_of_node(fwnode)); So I would fold the [14/15] into this one and then it should be clear why that change was useful. > + if (node) > + parent = &node->fwnode; > + } else if (is_acpi_node(fwnode)) { > + parent = acpi_node_get_parent(fwnode); > + } > + > + return parent; > +} > +EXPORT_SYMBOL_GPL(fwnode_get_next_parent); > + > +/** > * fwnode_get_parent - Return parent firwmare node > * @fwnode: Firmware whose parent is retrieved > * > diff --git a/include/linux/property.h b/include/linux/property.h > index 45ef00a..19dd35e 100644 > --- a/include/linux/property.h > +++ b/include/linux/property.h > @@ -77,6 +77,7 @@ int fwnode_property_match_string(struct fwnode_handle *fwnode, > const char *propname, const char *string); > > struct fwnode_handle *fwnode_get_parent(struct fwnode_handle *fwnode); > +struct fwnode_handle *fwnode_get_next_parent(struct fwnode_handle *fwnode); > struct fwnode_handle *fwnode_get_next_child_node(struct fwnode_handle *fwnode, > struct fwnode_handle *child); > > Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html