From 376cc3f4d29927fc0abcb63eb128165e2ee5b73b Mon Sep 17 00:00:00 2001 From: William Wu Date: Mon, 8 Mar 2021 17:44:21 +0800 Subject: [PATCH] usb: gadget: f_uvc: trace uvc control request This patch add new uvc trace for setup request processing. 1. enable trace echo 4 > /sys/module/usb_f_uvc/parameters/trace 2. dump trace dmesg Test on RV1109 EVB with UVC function when streaming on: [ 426.441316] uvcvideo: setup request a1 81 value 0100 index 0003 001a [ 426.450280] uvcvideo: uvc_send_response: req len 26 [ 426.450444] uvcvideo: event_setup_out 0, data len 26 [ 426.451545] uvcvideo: setup request 21 01 value 0100 index 0003 001a [ 426.460862] uvcvideo: uvc_send_response: req len 26 [ 426.461014] uvcvideo: event_setup_out 1, data len 26 [ 426.461173] uvcvideo: setup request a1 81 value 0100 index 0003 001a [ 426.485791] uvcvideo: uvc_send_response: req len 26 [ 426.486672] uvcvideo: event_setup_out 0, data len 26 [ 426.487145] uvcvideo: setup request a1 83 value 0100 index 0003 001a [ 426.496529] uvcvideo: uvc_send_response: req len 26 [ 426.496655] uvcvideo: event_setup_out 0, data len 26 [ 426.497485] uvcvideo: setup request a1 82 value 0100 index 0003 001a [ 426.506737] uvcvideo: uvc_send_response: req len 26 [ 426.507195] uvcvideo: event_setup_out 0, data len 26 Signed-off-by: William Wu Signed-off-by: Frank Wang Change-Id: If882728e891d033c249e6c466b40d3e2a28bccb6 --- drivers/usb/gadget/function/f_uvc.c | 9 +++++++++ drivers/usb/gadget/function/uvc_v4l2.c | 1 + 2 files changed, 10 insertions(+) diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c index 3c5d2593bbf9..7ccc28c93dc7 100644 --- a/drivers/usb/gadget/function/f_uvc.c +++ b/drivers/usb/gadget/function/f_uvc.c @@ -275,6 +275,10 @@ uvc_function_ep0_complete(struct usb_ep *ep, struct usb_request *req) struct v4l2_event v4l2_event; struct uvc_event *uvc_event = (void *)&v4l2_event.u.data; + uvc_trace(UVC_TRACE_CONTROL, + "event_setup_out %d, data len %d\n", + uvc->event_setup_out, req->actual); + if (uvc->event_setup_out) { uvc->event_setup_out = 0; @@ -293,6 +297,11 @@ uvc_function_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl) struct v4l2_event v4l2_event; struct uvc_event *uvc_event = (void *)&v4l2_event.u.data; + uvc_trace(UVC_TRACE_CONTROL, + "setup request %02x %02x value %04x index %04x %04x\n", + ctrl->bRequestType, ctrl->bRequest, le16_to_cpu(ctrl->wValue), + le16_to_cpu(ctrl->wIndex), le16_to_cpu(ctrl->wLength)); + if ((ctrl->bRequestType & USB_TYPE_MASK) != USB_TYPE_CLASS) { uvcg_info(f, "invalid request type\n"); return -EINVAL; diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c index 4c51e1629527..2528c894254f 100644 --- a/drivers/usb/gadget/function/uvc_v4l2.c +++ b/drivers/usb/gadget/function/uvc_v4l2.c @@ -41,6 +41,7 @@ uvc_send_response(struct uvc_device *uvc, struct uvc_request_data *data) req->length = min_t(unsigned int, uvc->event_length, data->length); req->zero = data->length < uvc->event_length; + uvc_trace(UVC_TRACE_CONTROL, "%s: req len %d\n", __func__, req->length); memcpy(req->buf, data->data, req->length); return usb_ep_queue(cdev->gadget->ep0, req, GFP_KERNEL);