[PATCH] usb: gadget: uvc: Fixed the abnormal enumeration problem of mobile phone as UVC camera.

From: 胡连勤
Date: Wed Jul 31 2024 - 02:49:13 EST


From c464558a70e1ca36c0e4bd0a121fb50565b44610 Mon Sep 17 00:00:00 2001
From: Lianqin Hu <hulianqin@xxxxxxxx>
Date: Wed, 31 Jul 2024 14:21:52 +0800
Subject: [PATCH] usb: gadget: uvc: Fixed the abnormal enumeration problem of
mobile phone as UVC camera.

When the phone is connected to the computer to use the webcam function,
the phone needs to be enumerated as a uvc camera function.

Because uvc->func.bind_deactivated is configured as true in the f_uvc
driver uvc_alloc function, the usb_gadget_deactivate function is called
during the execution of the configfs_composite_bind function to
set gadget->deactivated to true, which in turn causes the
usb_gadget_connect_locked function to fail to call the corresponding
controller pullup operation (such as: dwc3_gadget_pullup,
mtu3_gadget_pullup), and the USB cannot be enumerated
normally under the uvc function combination.

After applying this patch, we measured that under the uvc function,
the dwc3 controller and the mtu3 controller can be enumerated normally,
and the webcam function is normal.

Therefore, modify the f_uvc driver to remove the operation of setting
uvc->func.bind_deactivated to true.

Signed-off-by: Lianqin Hu <hulianqin@xxxxxxxx>
---
drivers/usb/gadget/function/f_uvc.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
index 40187b7112e7..6d63bea14211 100644
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -1107,7 +1107,6 @@ static struct usb_function *uvc_alloc(struct usb_function_instance *fi)
uvc->func.disable = uvc_function_disable;
uvc->func.setup = uvc_function_setup;
uvc->func.free_func = uvc_free;
- uvc->func.bind_deactivated = true;

return &uvc->func;

--
2.39.0