Hi Laurent,

On 06/11/2018 23:08, Laurent Pinchart wrote:
> Hi Kieran,
> 
> Thank you for the patch.
> 
> On Tuesday, 6 November 2018 23:27:18 EET Kieran Bingham wrote:
>> From: Kieran Bingham <kieran.bing...@ideasonboard.com>
>>
>> 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 cd8c03341de0..682698ec1118 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 ce9e40444507..0d35e933856a 100644
>> --- a/drivers/media/usb/uvc/uvc_video.c
>> +++ b/drivers/media/usb/uvc/uvc_video.c
>> @@ -2082,38 +2082,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;
>> @@ -2136,3 +2108,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);
> 
> This now holds on a single line.

Ah yes.

> 
>> +    } else {
>> +            /* UVC doesn't specify how to inform a bulk-based device
> 
> Let's fix the checkpatch.pl warning here.

Oh ? I didn't get any checkpatch warnings. Do I need to add some
parameters to my checkpatch now?

> 
>> +             * 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;
> 
> As this always return 0 you can make it a void function.

Certainly.

> 
> Apart from that,
> 
> Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> 
> I'll take the patch in my tree with the above changes.
> 

Great, thanks.

--
KB

>> +}
>> diff --git a/drivers/media/usb/uvc/uvcvideo.h
>> b/drivers/media/usb/uvc/uvcvideo.h index 0953e2e59a79..c0a120496a1f 100644
>> --- a/drivers/media/usb/uvc/uvcvideo.h
>> +++ b/drivers/media/usb/uvc/uvcvideo.h
>> @@ -784,7 +784,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,
> 

Reply via email to