Hi Laurent,

I see that you made changes to this patch before accepting it last time.

I'm afraid I haven't made those changes here, so please just cherry-pick
your previous incarnation. There are no changes here from me between v5,
and v6.

Regards
--
Kieran


On 09/11/2018 17:05, Kieran Bingham wrote:
> uvc_video_enable() is used both to start and stop the video stream
> object, however the single function entry point shares no code between
> the two operations.
> 
> Split the function into two distinct calls, and rename to
> uvc_video_start_streaming() and uvc_video_stop_streaming() as
> appropriate.
> 
> Signed-off-by: Kieran Bingham <kieran.bing...@ideasonboard.com>
> ---
>  drivers/media/usb/uvc/uvc_queue.c |  4 +-
>  drivers/media/usb/uvc/uvc_video.c | 56 +++++++++++++++-----------------
>  drivers/media/usb/uvc/uvcvideo.h  |  3 +-
>  3 files changed, 31 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_queue.c 
> b/drivers/media/usb/uvc/uvc_queue.c
> index 2752e386f1e8..d09b0c882938 100644
> --- a/drivers/media/usb/uvc/uvc_queue.c
> +++ b/drivers/media/usb/uvc/uvc_queue.c
> @@ -176,7 +176,7 @@ static int uvc_start_streaming(struct vb2_queue *vq, 
> unsigned int count)
>  
>       queue->buf_used = 0;
>  
> -     ret = uvc_video_enable(stream, 1);
> +     ret = uvc_video_start_streaming(stream);
>       if (ret == 0)
>               return 0;
>  
> @@ -194,7 +194,7 @@ static void uvc_stop_streaming(struct vb2_queue *vq)
>       lockdep_assert_irqs_enabled();
>  
>       if (vq->type != V4L2_BUF_TYPE_META_CAPTURE)
> -             uvc_video_enable(uvc_queue_to_stream(queue), 0);
> +             uvc_video_stop_streaming(uvc_queue_to_stream(queue));
>  
>       spin_lock_irq(&queue->irqlock);
>       uvc_queue_return_buffers(queue, UVC_BUF_STATE_ERROR);
> diff --git a/drivers/media/usb/uvc/uvc_video.c 
> b/drivers/media/usb/uvc/uvc_video.c
> index e19bdf089cc4..cd67506dc696 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -2076,38 +2076,10 @@ int uvc_video_init(struct uvc_streaming *stream)
>       return 0;
>  }
>  
> -/*
> - * Enable or disable the video stream.
> - */
> -int uvc_video_enable(struct uvc_streaming *stream, int enable)
> +int uvc_video_start_streaming(struct uvc_streaming *stream)
>  {
>       int ret;
>  
> -     if (!enable) {
> -             uvc_uninit_video(stream, 1);
> -             if (stream->intf->num_altsetting > 1) {
> -                     usb_set_interface(stream->dev->udev,
> -                                       stream->intfnum, 0);
> -             } else {
> -                     /* UVC doesn't specify how to inform a bulk-based device
> -                      * when the video stream is stopped. Windows sends a
> -                      * CLEAR_FEATURE(HALT) request to the video streaming
> -                      * bulk endpoint, mimic the same behaviour.
> -                      */
> -                     unsigned int epnum = stream->header.bEndpointAddress
> -                                        & USB_ENDPOINT_NUMBER_MASK;
> -                     unsigned int dir = stream->header.bEndpointAddress
> -                                      & USB_ENDPOINT_DIR_MASK;
> -                     unsigned int pipe;
> -
> -                     pipe = usb_sndbulkpipe(stream->dev->udev, epnum) | dir;
> -                     usb_clear_halt(stream->dev->udev, pipe);
> -             }
> -
> -             uvc_video_clock_cleanup(stream);
> -             return 0;
> -     }
> -
>       ret = uvc_video_clock_init(stream);
>       if (ret < 0)
>               return ret;
> @@ -2130,3 +2102,29 @@ int uvc_video_enable(struct uvc_streaming *stream, int 
> enable)
>  
>       return ret;
>  }
> +
> +int uvc_video_stop_streaming(struct uvc_streaming *stream)
> +{
> +     uvc_uninit_video(stream, 1);
> +     if (stream->intf->num_altsetting > 1) {
> +             usb_set_interface(stream->dev->udev,
> +                               stream->intfnum, 0);
> +     } else {
> +             /* UVC doesn't specify how to inform a bulk-based device
> +              * when the video stream is stopped. Windows sends a
> +              * CLEAR_FEATURE(HALT) request to the video streaming
> +              * bulk endpoint, mimic the same behaviour.
> +              */
> +             unsigned int epnum = stream->header.bEndpointAddress
> +                                & USB_ENDPOINT_NUMBER_MASK;
> +             unsigned int dir = stream->header.bEndpointAddress
> +                              & USB_ENDPOINT_DIR_MASK;
> +             unsigned int pipe;
> +
> +             pipe = usb_sndbulkpipe(stream->dev->udev, epnum) | dir;
> +             usb_clear_halt(stream->dev->udev, pipe);
> +     }
> +
> +     uvc_video_clock_cleanup(stream);
> +     return 0;
> +}
> diff --git a/drivers/media/usb/uvc/uvcvideo.h 
> b/drivers/media/usb/uvc/uvcvideo.h
> index 94accfa3c009..b1b895c67122 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -786,7 +786,8 @@ void uvc_mc_cleanup_entity(struct uvc_entity *entity);
>  int uvc_video_init(struct uvc_streaming *stream);
>  int uvc_video_suspend(struct uvc_streaming *stream);
>  int uvc_video_resume(struct uvc_streaming *stream, int reset);
> -int uvc_video_enable(struct uvc_streaming *stream, int enable);
> +int uvc_video_start_streaming(struct uvc_streaming *stream);
> +int uvc_video_stop_streaming(struct uvc_streaming *stream);
>  int uvc_probe_video(struct uvc_streaming *stream,
>                   struct uvc_streaming_control *probe);
>  int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
> 

-- 
Regards
--
Kieran

Reply via email to