UVC gadget driver not working with other gadget functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey all,

Disclaimer: I am very new to the kernel space so apologies for any
newb mistakes.

I am working on trying to enable the UVC gadget driver on an Android
Device. The device already supports configfs and has a few gadget
functions already working. ADB (f_fs) and USB Tethering (f_ncm) are
the ones I tested with.

I added CONFIG_USB_CONFIGFS_F_UVC=y to the kernel's config, was able
to create a uvc function following the example in
https://docs.kernel.org/usb/gadget-testing.html#uvc-function.

After symlinking the uvc function to configfs, when the gadget is
pulled up I see that all functions including UVC are bound to the
composite gadget without any errors. However, while the UVC function
is linked, no other function can communicate over their endpoints. The
host is able to enumerate all the functions, but is unable to read
from or write to non-uvc endpoints. Removing the UVC function from
configfs and pulling up the gadget again restores all other functions.

Testing the UVC gadget shows that the UVC driver is functioning
properly and a linux host is able to communicate with the UVC gadget
over V4L2 as expected.

AFAICT, there are no kernel logs showing errors in reading/writing to
endpoints even after enabling debug logs. Some rudimentary debugging
shows that the endpoints of other functions stop responding if the UVC
gadget writes its usb descriptors to its usb_function in
uvc_function_bind. I stub out all functionality from the uvc gadget
(except alloc and free), the other functions work properly. But if I
unstub uvc_function_bind to go as far as writing the descriptor in
fs_descriptors (f_uvc.c, uvc_function_bind line#713), the other
functions stop working.

Is this a known issue, or am I missing something obvious? Any help
would be appreciated!

Misc info:
- Kernel Version: 5.10.107
- USB controller: DWC3 (unfortunately, I don't have devices with any
other controllers available)
- Changes made: None. The gadget drivers show this behavior without
any changes. I tried to copy over changes from ToT
https://github.com/torvalds/linux/blob/master/drivers/usb/gadget/function/f_uvc.c
which fixed some crashes, but this behavior sticks.

Thank you!

- Avi



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux