From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:24
This series improves the uvc video gadget overal stability and code
quality. Including a fix for the configfs udc callbacks.
v3: - dropped patch: usb: gadget: udc: ensure the gadget is still available
Michael Grzeschik (5):
usb: gadget: uvc: consistently use define for headerlen
usb: gadget: uvc: test if ep->desc is valid on ep_queue
usb: gadget: uvc: only schedule stream in streaming state
usb: gadget: uvc: only pump video data if necessary
usb: gadget: uvc: ensure the vdev is unset
Michael Tretter (1):
usb: gadget: uvc: rename function to be more consistent
drivers/usb/gadget/function/f_uvc.c | 8 +++++---
drivers/usb/gadget/function/uvc_v4l2.c | 3 ++-
drivers/usb/gadget/function/uvc_video.c | 26 ++++++++++++++++---------
3 files changed, 24 insertions(+), 13 deletions(-)
--
2.30.2
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:22
If the streaming endpoint is not enabled, the worker has nothing to do.
In the case buffers are still queued, this patch ensures that it will bail
out without handling any data.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed commit description
drivers/usb/gadget/function/uvc_video.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
@@ -334,12 +334,12 @@ static void uvcg_video_pump(struct work_struct *work){structuvc_video*video=container_of(work,structuvc_video,pump);structuvc_video_queue*queue=&video->queue;-structusb_request*req;+structusb_request*req=NULL;structuvc_buffer*buf;unsignedlongflags;intret;-while(1){+while(video->ep->enabled){/* Retrieve the first available USB request, protected by the*requestlock.*/
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:24
This patch ensures that the video pump thread will only be scheduled if
the uvc is really in streaming state. This way the worker will not have
to run on an empty queue.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
drivers/usb/gadget/function/uvc_v4l2.c | 3 ++-
drivers/usb/gadget/function/uvc_video.c | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:24
The reason that the ep_queue has failed could be a disabled endpoint.
In that case it is not guaranteed that the ep->desc is still valid.
This patch adds a check for NULL.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed commit description
- added comment to condition
drivers/usb/gadget/function/uvc_video.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
@@ -199,9 +199,12 @@ static int uvcg_video_ep_queue(struct uvc_video *video, struct usb_request *req)uvcg_err(&video->uvc->func,"Failed to queue request (%d).\n",ret);-/* Isochronous endpoints can't be halted. */-if(usb_endpoint_xfer_bulk(video->ep->desc))-usb_ep_set_halt(video->ep);+/* If the endpoint is disabled the descriptor may be NULL. */+if(video->ep->desc){+/* Isochronous endpoints can't be halted. */+if(usb_endpoint_xfer_bulk(video->ep->desc))+usb_ep_set_halt(video->ep);+}}returnret;
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:24
Since the uvc video device is created on demand, we have to ensure
that the struct is always zeroed. Otherwise the previous settings
might collide with the new values.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed commit description
- using sizeof(uvc->video) on memset
---
drivers/usb/gadget/function/f_uvc.c | 1 +
1 file changed, 1 insertion(+)
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:24
From: Michael Tretter <m.tretter@pengutronix.de>
When enabling info debugging for the uvc gadget, the bind and unbind
infos use different formats. Change the unbind to visually match the
bind.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - wrapped the function line
drivers/usb/gadget/function/f_uvc.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
From: Michael Grzeschik <hidden> Date: 2021-10-17 21:50:25
The uvc request headerlen of 2 was defined as UVCG_REQUEST_HEADER_LEN
in commit e81e7f9a0eb9 ("usb: gadget: uvc: add scatter gather support").
We missed to use it consistently. This patch fixes that.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed wrong use of define
- added missing use of define in uvc_video_encode_header
drivers/usb/gadget/function/uvc_video.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
From: Michael Grzeschik <hidden> Date: 2021-10-18 00:11:47
The uvc request headerlen of 2 was defined as UVCG_REQUEST_HEADER_LEN
in commit e81e7f9a0eb9 ("usb: gadget: uvc: add scatter gather support").
We missed to use it consistently. This patch fixes that.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed wrong use of define
- added missing use of define in uvc_video_encode_header
v4: - fixed headersize in struct uvc_request to also use the define
drivers/usb/gadget/function/uvc.h | 4 +++-
drivers/usb/gadget/function/uvc_video.c | 6 +++---
drivers/usb/gadget/function/uvc_video.h | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)
From: Michael Grzeschik <hidden> Date: 2021-10-18 07:20:41
Oh, I forgot v4 in the subject. Will resend. Ignore this.
On Mon, Oct 18, 2021 at 02:11:39AM +0200, Michael Grzeschik wrote:
quoted hunk
The uvc request headerlen of 2 was defined as UVCG_REQUEST_HEADER_LEN
in commit e81e7f9a0eb9 ("usb: gadget: uvc: add scatter gather support").
We missed to use it consistently. This patch fixes that.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed wrong use of define
- added missing use of define in uvc_video_encode_header
v4: - fixed headersize in struct uvc_request to also use the define
drivers/usb/gadget/function/uvc.h | 4 +++-
drivers/usb/gadget/function/uvc_video.c | 6 +++---
drivers/usb/gadget/function/uvc_video.h | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)
From: Michael Grzeschik <hidden> Date: 2021-10-18 07:21:03
The uvc request headerlen of 2 was defined as UVCG_REQUEST_HEADER_LEN
in commit e81e7f9a0eb9 ("usb: gadget: uvc: add scatter gather support").
We missed to use it consistently. This patch fixes that.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed wrong use of define
- added missing use of define in uvc_video_encode_header
v4: - fixed headersize in struct uvc_request to also use the define
drivers/usb/gadget/function/uvc.h | 4 +++-
drivers/usb/gadget/function/uvc_video.c | 6 +++---
drivers/usb/gadget/function/uvc_video.h | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)
Hi Michael,
Thank you for the patch.
On Mon, Oct 18, 2021 at 09:20:59AM +0200, Michael Grzeschik wrote:
The uvc request headerlen of 2 was defined as UVCG_REQUEST_HEADER_LEN
in commit e81e7f9a0eb9 ("usb: gadget: uvc: add scatter gather support").
We missed to use it consistently. This patch fixes that.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Michael Grzeschik <redacted>
---
v3: - fixed wrong use of define
- added missing use of define in uvc_video_encode_header
v4: - fixed headersize in struct uvc_request to also use the define
drivers/usb/gadget/function/uvc.h | 4 +++-
drivers/usb/gadget/function/uvc_video.c | 6 +++---
drivers/usb/gadget/function/uvc_video.h | 2 --
3 files changed, 6 insertions(+), 6 deletions(-)