Re: [PATCH v5 03/23] media: v4l2-subdev: add v4l2_subdev_get_fwnode_pad_default

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

 



Hi Steve,

On Sun, Apr 19, 2020 at 05:39:10PM -0700, Steve Longerbeam wrote:
> Add a convenience function that can be used as the .get_fwnode_pad
> operation for subdevices that map port numbers and pad indexes 1:1.
> The function verifies the endpoint is owned by the subdevice, and if
> so returns the endpoint port number.
> 
> Signed-off-by: Steve Longerbeam <slongerbeam@xxxxxxxxx>
> ---
>  drivers/media/v4l2-core/v4l2-subdev.c | 25 +++++++++++++++++++++++++
>  include/media/v4l2-subdev.h           | 17 +++++++++++++++++
>  2 files changed, 42 insertions(+)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
> index a376b351135f..d5b5cd7a6049 100644
> --- a/drivers/media/v4l2-core/v4l2-subdev.c
> +++ b/drivers/media/v4l2-core/v4l2-subdev.c
> @@ -696,6 +696,31 @@ const struct v4l2_file_operations v4l2_subdev_fops = {
>  };
>  
>  #ifdef CONFIG_MEDIA_CONTROLLER
> +
> +int v4l2_subdev_get_fwnode_pad_default(struct media_entity *entity,
> +				       struct fwnode_endpoint *endpoint)
> +{
> +	struct fwnode_handle *ep;
> +	struct v4l2_subdev *sd;
> +
> +	if (!is_media_entity_v4l2_subdev(entity))
> +		return -EINVAL;
> +
> +	sd = media_entity_to_v4l2_subdev(entity);
> +
> +	fwnode_graph_for_each_endpoint(dev_fwnode(sd->dev), ep) {
> +		if (ep != endpoint->local_fwnode)
> +			continue;

If the purpose is just to check a given endpoint belongs to a device, could
it be done in a more simple way? E.g.:

	fwnode = fwnode_graph_get_port_parent(endpoint->local_fwnode);
	fwnode_handle_put(fwnode);

	if (dev_fwnode(sd->dev) == fwnode)
		return endpoint->port;

	return -ENXIO;

> +
> +		fwnode_handle_put(ep);
> +
> +		return endpoint->port;
> +	}
> +
> +	return -ENXIO;
> +}
> +EXPORT_SYMBOL_GPL(v4l2_subdev_get_fwnode_pad_default);
> +
>  int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
>  				      struct media_link *link,
>  				      struct v4l2_subdev_format *source_fmt,
> diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
> index a4848de59852..940181323427 100644
> --- a/include/media/v4l2-subdev.h
> +++ b/include/media/v4l2-subdev.h
> @@ -1027,6 +1027,23 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
>  
>  #ifdef CONFIG_MEDIA_CONTROLLER
>  
> +/**
> + * v4l2_subdev_get_fwnode_pad_default - Get pad number from a subdev fwnode
> + *                                      endpoint, assuming 1:1 port:pad
> + *
> + * @entity - Pointer to the subdev entity
> + * @endpoint - Pointer to a parsed fwnode endpoint
> + *
> + * This function can be used as the .get_fwnode_pad operation for
> + * subdevices that map port numbers and pad indexes 1:1. If the endpoint
> + * is owned by the subdevice, the function returns the endpoint port
> + * number.
> + *
> + * Returns the endpoint port number on success or a negative error code.
> + */
> +int v4l2_subdev_get_fwnode_pad_default(struct media_entity *entity,
> +				       struct fwnode_endpoint *endpoint);
> +
>  /**
>   * v4l2_subdev_link_validate_default - validates a media link
>   *

-- 
Kind regards,

Sakari Ailus



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux