All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 7/7] media: uvcvideo: Replace get_mapping with filter_mapping
Date: Mon, 17 Jun 2024 01:17:33 +0300	[thread overview]
Message-ID: <20240616221733.GA28126@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20240610-billion-v2-7-38e861475f85@chromium.org>

Hi Ricardo,

Thank you for the patch.

On Mon, Jun 10, 2024 at 11:09:58PM +0000, Ricardo Ribalda wrote:
> If the callback returns a mapping instead of adding it, the codeflow is
> more clean and we do not need a forward declaration of
> __uvc_ctrl_add_mapping_to_list().
> 
> Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>

This should have been squashed in the previous patches as appropriate.
It's hard to review the new version this way.

The diff with v1 looks good, so I don't expect to have further comments.

> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 40 ++++++++++++++++++----------------------
>  drivers/media/usb/uvc/uvcvideo.h |  6 +++---
>  2 files changed, 21 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 1c1710e3c486..4a13f2685d9e 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -495,11 +495,8 @@ static const struct uvc_control_mapping uvc_ctrl_power_line_mapping_uvc15 = {
>  				  V4L2_CID_POWER_LINE_FREQUENCY_DISABLED),
>  };
>  
> -static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain,
> -	struct uvc_control *ctrl, const struct uvc_control_mapping *mapping);
> -
> -static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain,
> -	struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
> +static const struct uvc_control_mapping *uvc_ctrl_filter_plf_mapping
> +		(struct uvc_video_chain *chain, struct uvc_control *ctrl)
>  {
>  	const struct uvc_control_mapping *out_mapping =
>  					&uvc_ctrl_power_line_mapping_uvc11;
> @@ -509,7 +506,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain,
>  
>  	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
>  	if (!buf)
> -		return -ENOMEM;
> +		return NULL;
>  
>  	/* Save the default PLF value, so we can restore it. */
>  	ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, ctrl->entity->id,
> @@ -517,7 +514,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain,
>  			     buf, sizeof(*buf));
>  	/* If we cannot read the control skip it. */
>  	if (ret)
> -		return ret;
> +		return NULL;
>  	init_val = *buf;
>  
>  	/* If PLF value cannot be set to off, it is limited. */
> @@ -526,8 +523,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain,
>  			     chain->dev->intfnum, ctrl->info.selector,
>  			     buf, sizeof(*buf));
>  	if (ret)
> -		return __uvc_ctrl_add_mapping_to_list(chain, ctrl,
> -					&uvc_ctrl_power_line_mapping_limited);
> +		return &uvc_ctrl_power_line_mapping_limited;
>  
>  	/* UVC 1.1 does not define auto, we can exit. */
>  	if (chain->dev->uvc_version < 0x150)
> @@ -548,7 +544,7 @@ static int uvc_ctrl_add_plf_mapping(struct uvc_video_chain *chain,
>  		       chain->dev->intfnum, ctrl->info.selector,
>  		       buf, sizeof(*buf));
>  
> -	return __uvc_ctrl_add_mapping_to_list(chain, ctrl, out_mapping);
> +	return out_mapping;
>  }
>  
>  static const struct uvc_control_mapping uvc_ctrl_mappings[] = {
> @@ -843,7 +839,7 @@ static const struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  	{
>  		.entity		= UVC_GUID_UVC_PROCESSING,
>  		.selector	= UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
> -		.add_mapping	= uvc_ctrl_add_plf_mapping,
> +		.filter_mapping	= uvc_ctrl_filter_plf_mapping,
>  	},
>  };
>  
> @@ -2411,8 +2407,9 @@ static int uvc_ctrl_add_info(struct uvc_device *dev, struct uvc_control *ctrl,
>  /*
>   * Add a control mapping to a given control.
>   */
> -static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain,
> -	struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
> +static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
> +				  struct uvc_control *ctrl,
> +				  const struct uvc_control_mapping *mapping)
>  {
>  	struct uvc_control_mapping *map;
>  	unsigned int size;
> @@ -2485,14 +2482,6 @@ static int __uvc_ctrl_add_mapping_to_list(struct uvc_video_chain *chain,
>  	return -ENOMEM;
>  }
>  
> -static int __uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
> -	struct uvc_control *ctrl, const struct uvc_control_mapping *mapping)
> -{
> -	if (mapping && mapping->add_mapping)
> -		return mapping->add_mapping(chain, ctrl, mapping);
> -	return __uvc_ctrl_add_mapping_to_list(chain, ctrl, mapping);
> -}
> -
>  int uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
>  	const struct uvc_control_mapping *mapping)
>  {
> @@ -2681,7 +2670,14 @@ static void uvc_ctrl_init_ctrl(struct uvc_video_chain *chain,
>  
>  	/* Process common mappings. */
>  	for (i = 0; i < ARRAY_SIZE(uvc_ctrl_mappings); ++i) {
> -		const struct uvc_control_mapping *mapping = &uvc_ctrl_mappings[i];
> +		const struct uvc_control_mapping *mapping = NULL;
> +
> +		/* Try to get a custom mapping from the device. */
> +		if (uvc_ctrl_mappings[i].filter_mapping)
> +			mapping = uvc_ctrl_mappings[i].filter_mapping(chain,
> +								      ctrl);
> +		if (!mapping)
> +			mapping = &uvc_ctrl_mappings[i];
>  
>  		if (uvc_entity_match_guid(ctrl->entity, mapping->entity) &&
>  		    ctrl->info.selector == mapping->selector)
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index ff9545dcf716..a9547795fe22 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -125,9 +125,9 @@ struct uvc_control_mapping {
>  	s32 master_manual;
>  	u32 slave_ids[2];
>  
> -	int (*add_mapping)(struct uvc_video_chain *chain,
> -			   struct uvc_control *ctrl,
> -			   const struct uvc_control_mapping *mapping);
> +	const struct uvc_control_mapping *(*filter_mapping)
> +				(struct uvc_video_chain *chain,
> +				struct uvc_control *ctrl);
>  	s32 (*get)(struct uvc_control_mapping *mapping, u8 query,
>  		   const u8 *data);
>  	void (*set)(struct uvc_control_mapping *mapping, s32 value,
> 

-- 
Regards,

Laurent Pinchart

      reply	other threads:[~2024-06-16 22:17 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-10 23:09 [PATCH v2 0/7] media: uvc: Probe PLF limits at start-up Ricardo Ribalda
2024-06-10 23:09 ` [PATCH v2 1/7] media: uvcvideo: Allow custom control mapping Ricardo Ribalda
2024-06-16 23:06   ` Laurent Pinchart
2024-06-10 23:09 ` [PATCH v2 2/7] media: uvcvideo: Refactor Power Line Frequency limit selection Ricardo Ribalda
2024-06-16 23:03   ` Laurent Pinchart
2024-06-10 23:09 ` [PATCH v2 3/7] media: uvcvideo: Probe the PLF characteristics Ricardo Ribalda
2024-06-16 23:04   ` Laurent Pinchart
2024-06-10 23:09 ` [PATCH v2 4/7] media: uvcvideo: Cleanup version-specific mapping Ricardo Ribalda
2024-06-10 23:09 ` [PATCH v2 5/7] media: uvcvideo: Remove PLF device quirking Ricardo Ribalda
2024-06-16 23:05   ` Laurent Pinchart
2024-06-10 23:09 ` [PATCH v2 6/7] media: uvcvideo: Remove mappings form uvc_device_info Ricardo Ribalda
2024-06-16 23:05   ` Laurent Pinchart
2024-06-10 23:09 ` [PATCH v2 7/7] media: uvcvideo: Replace get_mapping with filter_mapping Ricardo Ribalda
2024-06-16 22:17   ` Laurent Pinchart [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240616221733.GA28126@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=senozhatsky@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.