Re: [PATCH v4 5/5] device property: Add FW type agnostic fwnode_graph_get_remote_node

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Mon, May 22, 2017 at 11:53:22AM +0300, Sakari Ailus wrote:
> Add fwnode_graph_get_remote_node() function which is equivalent to
> of_graph_get_remote_node() on OF.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> ---
>  drivers/base/property.c  | 37 +++++++++++++++++++++++++++++++++++++
>  include/linux/property.h |  2 ++
>  2 files changed, 39 insertions(+)
> 
> diff --git a/drivers/base/property.c b/drivers/base/property.c
> index f5ac4cc..b311a6f 100644
> --- a/drivers/base/property.c
> +++ b/drivers/base/property.c
> @@ -1214,6 +1214,43 @@ fwnode_graph_get_remote_endpoint(struct fwnode_handle *fwnode)
>  EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_endpoint);
>  
>  /**
> + * fwnode_graph_get_remote_node - get remote parent node for given port/endpoint
> + * @fwnode: pointer to parent fwnode_handle containing graph port/endpoint
> + * @port_id: identifier of the parent port node
> + * @endpoint_id: identifier of the endpoint node
> + *
> + * Return: Remote fwnode handle associated with remote endpoint node linked
> + *	   to @node. Use fwnode_node_put() on it when done.
> + */
> +struct fwnode_handle *fwnode_graph_get_remote_node(
> +	struct fwnode_handle *fwnode, u32 port_id, u32 endpoint_id)


Write it:

struct fwnode_handle *fwnode_graph_get_remote_node(struct fwnode_handle *fwnode,
						   u32 port_id, u32 endpoint_id)

instead.

> +{
> +	struct fwnode_handle *endpoint = NULL;
> +
> +	while ((endpoint = fwnode_graph_get_next_endpoint(fwnode, endpoint))) {
> +		struct fwnode_endpoint fwnode_ep;
> +		struct fwnode_handle *remote;
> +		int ret;
> +
> +		ret = fwnode_graph_parse_endpoint(endpoint, &fwnode_ep);
> +		if (ret < 0)
> +			continue;
> +
> +		if (fwnode_ep.port != port_id || fwnode_ep.id != endpoint_id)
> +			continue;
> +
> +		remote = fwnode_graph_get_remote_port_parent(endpoint);
> +		if (!remote)
> +			return NULL;
> +
> +		return fwnode_device_is_available(remote) ? remote : NULL;
> +	}
> +
> +	return NULL;
> +}
> +EXPORT_SYMBOL_GPL(fwnode_graph_get_remote_node);
> +
> +/**
>   * fwnode_graph_parse_endpoint - parse common endpoint node properties
>   * @fwnode: pointer to endpoint fwnode_handle
>   * @endpoint: pointer to the fwnode endpoint data structure
> diff --git a/include/linux/property.h b/include/linux/property.h
> index 7be014a..b9f4838 100644
> --- a/include/linux/property.h
> +++ b/include/linux/property.h
> @@ -281,6 +281,8 @@ struct fwnode_handle *fwnode_graph_get_remote_port(
>  	struct fwnode_handle *fwnode);
>  struct fwnode_handle *fwnode_graph_get_remote_endpoint(
>  	struct fwnode_handle *fwnode);
> +struct fwnode_handle *fwnode_graph_get_remote_node(
> +	struct fwnode_handle *fwnode, u32 port, u32 endpoint);

Also here:

struct fwnode_handle *fwnode_graph_get_remote_node(struct fwnode_handle *fwnode,
						   u32 port, u32 endpoint);

Other than that, I think this is going to the right direction as now we
start to use those primitives in more generic code. Hopefully most new
functionality will be added here, and the fwnode_operations will not
grow anymore ;-)
--
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



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux