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>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 04/12] media: uvcvideo: Provide sync and async uvc_ctrl_status_event
Date: Tue, 26 Jan 2021 17:38:58 +0200	[thread overview]
Message-ID: <YBA3krpfIfIB2vYc@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20201223133528.55014-5-ribalda@chromium.org>

Hi Ricardo,

Thank you for the patch.

On Wed, Dec 23, 2020 at 02:35:20PM +0100, Ricardo Ribalda wrote:
> Split the functionality of void uvc_ctrl_status_event_work in two, so it
> can be called by functions outside interrupt context and not part of an
> URB.
> 
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/media/usb/uvc/uvc_ctrl.c   | 25 +++++++++++++++----------
>  drivers/media/usb/uvc/uvc_status.c |  3 ++-
>  drivers/media/usb/uvc/uvcvideo.h   |  4 +++-
>  3 files changed, 20 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 9f6174a10e73..4d43f4c3e349 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1254,17 +1254,12 @@ static void uvc_ctrl_send_slave_event(struct uvc_video_chain *chain,
>  	uvc_ctrl_send_event(chain, handle, ctrl, mapping, val, changes);
>  }
>  
> -static void uvc_ctrl_status_event_work(struct work_struct *work)
> +void uvc_ctrl_status_event(struct uvc_video_chain *chain,
> +			   struct uvc_control *ctrl, const u8 *data)
>  {
> -	struct uvc_device *dev = container_of(work, struct uvc_device,
> -					      async_ctrl.work);
> -	struct uvc_ctrl_work *w = &dev->async_ctrl;
> -	struct uvc_video_chain *chain = w->chain;
>  	struct uvc_control_mapping *mapping;
> -	struct uvc_control *ctrl = w->ctrl;
>  	struct uvc_fh *handle;
>  	unsigned int i;
> -	int ret;
>  
>  	mutex_lock(&chain->ctrl_mutex);
>  
> @@ -1272,7 +1267,7 @@ static void uvc_ctrl_status_event_work(struct work_struct *work)
>  	ctrl->handle = NULL;
>  
>  	list_for_each_entry(mapping, &ctrl->info.mappings, list) {
> -		s32 value = __uvc_ctrl_get_value(mapping, w->data);
> +		s32 value = __uvc_ctrl_get_value(mapping, data);
>  
>  		/*
>  		 * handle may be NULL here if the device sends auto-update
> @@ -1291,6 +1286,16 @@ static void uvc_ctrl_status_event_work(struct work_struct *work)
>  	}
>  
>  	mutex_unlock(&chain->ctrl_mutex);
> +}
> +
> +static void uvc_ctrl_status_event_work(struct work_struct *work)
> +{
> +	struct uvc_device *dev = container_of(work, struct uvc_device,
> +					      async_ctrl.work);
> +	struct uvc_ctrl_work *w = &dev->async_ctrl;
> +	int ret;
> +
> +	uvc_ctrl_status_event(w->chain, w->ctrl, w->data);
>  
>  	/* Resubmit the URB. */
>  	w->urb->interval = dev->int_ep->desc.bInterval;
> @@ -1300,8 +1305,8 @@ static void uvc_ctrl_status_event_work(struct work_struct *work)
>  			   ret);
>  }
>  
> -bool uvc_ctrl_status_event(struct urb *urb, struct uvc_video_chain *chain,
> -			   struct uvc_control *ctrl, const u8 *data)
> +bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain,
> +				 struct uvc_control *ctrl, const u8 *data)
>  {
>  	struct uvc_device *dev = chain->dev;
>  	struct uvc_ctrl_work *w = &dev->async_ctrl;
> diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c
> index 2bdb0ff203f8..3e26d82a906d 100644
> --- a/drivers/media/usb/uvc/uvc_status.c
> +++ b/drivers/media/usb/uvc/uvc_status.c
> @@ -179,7 +179,8 @@ static bool uvc_event_control(struct urb *urb,
>  
>  	switch (status->bAttribute) {
>  	case UVC_CTRL_VALUE_CHANGE:
> -		return uvc_ctrl_status_event(urb, chain, ctrl, status->bValue);
> +		return uvc_ctrl_status_event_async(urb, chain, ctrl,
> +						   status->bValue);
>  
>  	case UVC_CTRL_INFO_CHANGE:
>  	case UVC_CTRL_FAILURE_CHANGE:
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index c50b0546901f..be784ed8354d 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -843,7 +843,9 @@ int uvc_ctrl_add_mapping(struct uvc_video_chain *chain,
>  int uvc_ctrl_init_device(struct uvc_device *dev);
>  void uvc_ctrl_cleanup_device(struct uvc_device *dev);
>  int uvc_ctrl_restore_values(struct uvc_device *dev);
> -bool uvc_ctrl_status_event(struct urb *urb, struct uvc_video_chain *chain,
> +bool uvc_ctrl_status_event_async(struct urb *urb, struct uvc_video_chain *chain,
> +				 struct uvc_control *ctrl, const u8 *data);
> +void uvc_ctrl_status_event(struct uvc_video_chain *chain,
>  			   struct uvc_control *ctrl, const u8 *data);
>  
>  int uvc_ctrl_begin(struct uvc_video_chain *chain);

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-01-26 15:41 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-23 13:35 [PATCH v7 00/12] Show privacy_gpio as a v4l2_ctrl Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 01/12] media: uvcvideo: Move guid to entity Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 02/12] media: uvcvideo: Allow extra entities Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 03/12] media: uvcvideo: Allow entities with no pads Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 04/12] media: uvcvideo: Provide sync and async uvc_ctrl_status_event Ricardo Ribalda
2021-01-26 15:38   ` Laurent Pinchart [this message]
2020-12-23 13:35 ` [PATCH v7 05/12] media: uvcvideo: Allow entity-defined get_info and get_cur Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 06/12] media: uvcvideo: Implement UVC_EXT_GPIO_UNIT Ricardo Ribalda
2021-01-26 15:53   ` Laurent Pinchart
2021-01-26 15:56     ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 07/12] media: uvcvideo: Add Privacy control based on EXT_GPIO Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 08/12] media: uvcvideo: Use dev_ printk aliases Ricardo Ribalda
2020-12-24 12:59   ` Andy Shevchenko
2020-12-24 13:50     ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 09/12] media: uvcvideo: New macro uvc_trace_cont Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 10/12] media: uvcvideo: use dev_printk() for uvc_trace() Ricardo Ribalda
2020-12-23 13:35 ` [PATCH v7 11/12] media: uvcvideo: Rename debug functions Ricardo Ribalda
2021-01-26 17:05   ` Laurent Pinchart
2020-12-23 13:35 ` [PATCH v7 12/12] media: uvcvideo: Implement UVC_QUIRK_PRIVACY_DURING_STREAM Ricardo Ribalda

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=YBA3krpfIfIB2vYc@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 \
    /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.