Hi Sakari, On 19/05/17 22:51, Sakari Ailus wrote: > Hi Kieran, > > On Fri, May 19, 2017 at 05:16:02PM +0100, Kieran Bingham wrote: >> +struct fwnode_handle * >> +fwnode_graph_get_port_parent(struct fwnode_handle *endpoint) >> +{ >> + return fwnode_call_ptr_op(endpoint, graph_get_port_parent); > > graph_get_port_parent op will actually get the parent of the port. But it > expects a port node, not an endpoint node. This is implemented so in order > to center the ops around primitives rather than end user APIs that may > change over time. > > I think you'll need: > > return fwnode_call_ptr_op(fwnode_graph_get_next_parent(endpoint), > graph_get_port_parent); > > Or something like that. Aha - that explains why I remember thinking to ask you if the implementation of graph_get_port_parent checked enough levels up :) I've added the fwnode_graph_get_next_parent() call, but separated it out so that the code fits cleanly: struct fwnode_handle * fwnode_graph_get_port_parent(struct fwnode_handle *endpoint) { struct fwnode_handle *port = fwnode_get_next_parent(endpoint); return fwnode_call_ptr_op(port, graph_get_port_parent); } EXPORT_SYMBOL_GPL(fwnode_graph_get_port_parent); I will include this in my testing and rebasing before I repost. -- Regards Kieran