Skip to content

Commit

Permalink
FROMGIT: usb: gadget: uvc: move video disable logic to its own function
Browse files Browse the repository at this point in the history
This patch refactors the video disable logic in uvcg_video_enable
into its own separate function 'uvcg_video_disable'. This function
is now used anywhere uvcg_video_enable(video, 0) was used.

Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Suggested-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Signed-off-by: Avichal Rakesh <arakesh@google.com>
Link: https://lore.kernel.org/r/20231109004104.3467968-3-arakesh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bug: 296925310
(cherry picked from commit 2079b60bda3257146a4e8ed7525513865f7e6b3e
 https://kernel.googlesource.com/pub/scm/linux/kernel/git/gregkh/usb usb-next)
Change-Id: Ie8934e6fe1577373b01e3c66626e4239cf9f8c83
Signed-off-by: Avichal Rakesh <arakesh@google.com>
  • Loading branch information
Avichal Rakesh committed Nov 27, 2023
1 parent 17f7b06 commit d102805
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 18 deletions.
6 changes: 3 additions & 3 deletions drivers/usb/gadget/function/uvc_v4l2.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ uvc_v4l2_streamon(struct file *file, void *fh, enum v4l2_buf_type type)
return -EINVAL;

/* Enable UVC video. */
ret = uvcg_video_enable(video, 1);
ret = uvcg_video_enable(video);
if (ret < 0)
return ret;

Expand All @@ -475,7 +475,7 @@ uvc_v4l2_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
return -EINVAL;

uvc->state = UVC_STATE_CONNECTED;
ret = uvcg_video_enable(video, 0);
ret = uvcg_video_disable(video);
if (ret < 0)
return ret;

Expand Down Expand Up @@ -521,7 +521,7 @@ static void uvc_v4l2_disable(struct uvc_device *uvc)
if (uvc->state == UVC_STATE_STREAMING)
uvc->state = UVC_STATE_CONNECTED;

uvcg_video_enable(&uvc->video, 0);
uvcg_video_disable(&uvc->video);
uvcg_free_buffers(&uvc->video.queue);
uvc->func_connected = false;
wake_up_interruptible(&uvc->func_connected_queue);
Expand Down
40 changes: 26 additions & 14 deletions drivers/usb/gadget/function/uvc_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -493,31 +493,43 @@ static void uvcg_video_pump(struct work_struct *work)
}

/*
* Enable or disable the video stream.
* Disable the video stream
*/
int uvcg_video_enable(struct uvc_video *video, int enable)
int
uvcg_video_disable(struct uvc_video *video)
{
int ret;
struct uvc_request *ureq;

if (video->ep == NULL) {
uvcg_info(&video->uvc->func,
"Video enable failed, device is uninitialized.\n");
"Video disable failed, device is uninitialized.\n");
return -ENODEV;
}

if (!enable) {
cancel_work_sync(&video->pump);
uvcg_queue_cancel(&video->queue, 0);
cancel_work_sync(&video->pump);
uvcg_queue_cancel(&video->queue, 0);

list_for_each_entry(ureq, &video->ureqs, list) {
if (ureq->req)
usb_ep_dequeue(video->ep, ureq->req);
}
list_for_each_entry(ureq, &video->ureqs, list) {
if (ureq->req)
usb_ep_dequeue(video->ep, ureq->req);
}

uvc_video_free_requests(video);
uvcg_queue_enable(&video->queue, 0);
return 0;
uvc_video_free_requests(video);
uvcg_queue_enable(&video->queue, 0);
return 0;
}

/*
* Enable the video stream.
*/
int uvcg_video_enable(struct uvc_video *video)
{
int ret;

if (video->ep == NULL) {
uvcg_info(&video->uvc->func,
"Video enable failed, device is uninitialized.\n");
return -ENODEV;
}

if ((ret = uvcg_queue_enable(&video->queue, 1)) < 0)
Expand Down
3 changes: 2 additions & 1 deletion drivers/usb/gadget/function/uvc_video.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@

struct uvc_video;

int uvcg_video_enable(struct uvc_video *video, int enable);
int uvcg_video_enable(struct uvc_video *video);
int uvcg_video_disable(struct uvc_video *video);

int uvcg_video_init(struct uvc_video *video, struct uvc_device *uvc);

Expand Down

0 comments on commit d102805

Please sign in to comment.