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.bingham@xxxxxxxxxxxxxxxx> > --- > 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