回复: [PATCH] usb: gadget:Fixed the problem of abnormal function of mobile phone as UVC camera.

From: 胡连勤
Date: Thu Jul 25 2024 - 21:50:17 EST


1. Modify the email title

2.
> Android 15 USB function option interface adds camera function.
> after switching to camera function, USB enumeration is abnormal.

What do you mean by "abnormal"?
--------------
Select the "Camera" function in the USB function option interface, and the dwc3 controller cannot be enumerated under the sys.usb.config=uvc mode combination

3.
> the reason is that bind_deactivated is set to true in f_uvc driver,
> which causes gadget->deactivated to be set to true during
> usb_add_function,and dwc3 controller cannot perform pullup operation.

Why does the dwc3 controller matter here?  What about other controllers?
--------------
Dwc3 & Mtu3 controller test normal.

>
> Therefore, modify f_uvc driver and remove the setting operation
> of func.bind_deactivated.
>
> 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;

Why was this set to be true to start with?  What commit id does this
fix?  Should it be backported to older kernels, and if so, how far back?
--------------
set to be true submit link:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f277bf27cf5cd56bcd1c4b95ae140f61680a6e83
I haven't seen what specific problem it solves yet, it looks like it makes the code logic more reasonable.

Should it be backported to older kernels, and if so, how far back?
--------------
It seems that the kernel versions used with Android 15 need to be synchronized

What user-visable changes does this patch cause?  What used to work that
now will not as that was added for a reason, right?
--------------
The "Camera" function in the USB function options on the phone can be used normally.
Android 15 seems to be the first version to support the "camera" function.

________________________________________
发件人: gregkh@xxxxxxxxxxxxxxxxxxx <gregkh@xxxxxxxxxxxxxxxxxxx>
发送时间: 2024年7月25日 15:05
收件人: 胡连勤 <hulianqin@xxxxxxxx>
抄送: akpm@xxxxxxxxxxxxxxxxxxxx <akpm@xxxxxxxxxxxxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx <linux-kernel@xxxxxxxxxxxxxxx>; opensource.kernel <opensource.kernel@xxxxxxxx>
主题: Re: Subject: [PATCH] usb: gadget:Fixed the problem of abnormal function of mobile phone as UVC camera.
 
On Thu, Jul 25, 2024 at 06:40:14AM +0000, 胡连勤 wrote:
> From b0058484e3fe7830c2092d5d19b46bf1bab73d83 Mon Sep 17 00:00:00 2001
> From: Lianqin Hu <hulianqin@xxxxxxxx>
> Date: Wed, 24 Jul 2024 18:52:27 +0800
> Subject: [PATCH] usb: gadget:Fixed the problem of abnormal function of mobile
>  phone as UVC camera.

For some reason this showed up in the body of the email, and your
subject line has "subject" in it :(

> Android 15 USB function option interface adds camera function.
> after switching to camera function, USB enumeration is abnormal.

What do you mean by "abnormal"?

> the reason is that bind_deactivated is set to true in f_uvc driver,
> which causes gadget->deactivated to be set to true during
> usb_add_function,and dwc3 controller cannot perform pullup operation.

Why does the dwc3 controller matter here?  What about other controllers?

>
> Therefore, modify f_uvc driver and remove the setting operation
> of func.bind_deactivated.
>
> 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;

Why was this set to be true to start with?  What commit id does this
fix?  Should it be backported to older kernels, and if so, how far back?

What user-visable changes does this patch cause?  What used to work that
now will not as that was added for a reason, right?

thanks,

greg k-h