kernel: log uvc ep sizing

This commit is contained in:
Brad Stein 2026-01-26 20:58:48 -03:00
parent eb40374389
commit 2fa996ed61

View File

@ -1,6 +1,6 @@
--- a/drivers/usb/gadget/function/uvc_video.c
+++ b/drivers/usb/gadget/function/uvc_video.c
@@ -503,6 +503,10 @@
@@ -503,9 +503,17 @@
unsigned int max_req_size, req_size, header_size;
unsigned int nreq;
@ -11,7 +11,14 @@
max_req_size = video->max_req_size;
if (!usb_endpoint_xfer_isoc(video->ep->desc)) {
@@ -534,6 +538,16 @@
+ uvcg_info(&uvc->func,
+ "Video prep non-isoc: attrs=0x%x max_req=%u imagesize=%u interval=%u\n",
+ video->ep->desc->bmAttributes, max_req_size,
+ video->imagesize, video->interval);
video->req_size = max_req_size;
video->reqs_per_frame = video->uvc_num_requests =
DIV_ROUND_UP(video->imagesize, max_req_size);
@@ -534,6 +542,16 @@
}
video->req_size = req_size;
@ -28,7 +35,19 @@
/* We need to compensate the amount of requests to be
* allocated with the maximum amount of zero length requests.
* Since it is possible that hw_submit will initially
@@ -764,20 +778,70 @@
@@ -558,6 +576,11 @@
*/
uvc_video_prep_requests(video);
+ uvcg_info(&video->uvc->func,
+ "Video alloc: req_size=%u max_req=%u max_payload=%u uvc_num_requests=%u reqs_per_frame=%u\n",
+ video->req_size, video->max_req_size, video->max_payload_size,
+ video->uvc_num_requests, video->reqs_per_frame);
+
for (i = 0; i < video->uvc_num_requests; i++) {
ureq = kzalloc(sizeof(struct uvc_request), GFP_KERNEL);
if (ureq == NULL)
@@ -764,20 +787,70 @@
{
int ret;
@ -99,3 +118,40 @@
if ((ret = uvcg_queue_enable(&video->queue, 1)) < 0)
return ret;
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -362,10 +362,34 @@
return ret;
usb_ep_enable(uvc->video.ep);
+ if (uvc->video.ep->desc)
+ uvcg_info(f,
+ "UVC ep config: speed=%u addr=0x%02x attrs=0x%02x maxpacket=%u maxburst=%u mult=%u wMaxPacket=0x%04x interval=%u\n",
+ f->config->cdev->gadget->speed,
+ uvc->video.ep->address,
+ uvc->video.ep->desc->bmAttributes,
+ uvc->video.ep->maxpacket, uvc->video.ep->maxburst,
+ uvc->video.ep->mult,
+ le16_to_cpu(uvc->video.ep->desc->wMaxPacketSize),
+ uvc->video.ep->desc->bInterval);
+ else
+ uvcg_err(f,
+ "UVC ep config: missing desc speed=%u maxpacket=%u maxburst=%u mult=%u\n",
+ f->config->cdev->gadget->speed,
+ uvc->video.ep->maxpacket, uvc->video.ep->maxburst,
+ uvc->video.ep->mult);
+
uvc->video.max_req_size = uvc->video.ep->maxpacket
* max_t(unsigned int, uvc->video.ep->maxburst, 1)
* (uvc->video.ep->mult);
+ uvcg_info(f,
+ "UVC max_req_size=%u (maxpacket=%u maxburst=%u mult=%u)\n",
+ uvc->video.max_req_size,
+ uvc->video.ep->maxpacket,
+ uvc->video.ep->maxburst,
+ uvc->video.ep->mult);
+
memset(&v4l2_event, 0, sizeof(v4l2_event));
v4l2_event.type = UVC_EVENT_STREAMON;
v4l2_event_queue(&uvc->vdev, &v4l2_event);