Re: [PATCH 4/4] USB: gadget: Add a new bus for gadgets

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

 



	Hi Alan,

On Sat, 23 Apr 2022, Alan Stern wrote:
This patch adds a "gadget" bus and uses it for registering gadgets and
their drivers.  From now on, bindings will be managed by the driver
core rather than through ad-hoc manipulations in the UDC core.

As part of this change, the driver_pending_list is removed.  The UDC
core won't need to keep track of unbound drivers for later binding,
because the driver core handles all of that for us.

However, we do need one new feature: a way to prevent gadget drivers
from being bound to more than one gadget at a time.  The existing code
does this automatically, but the driver core doesn't -- it's perfectly
happy to bind a single driver to all the matching devices on the bus.
The patch adds a new bitflag to the usb_gadget_driver structure for
this purpose.

A nice side effect of this change is a reduction in the total lines of
code, since now the driver core will do part of the work that the UDC
used to do.

A possible future patch could add udc devices to the gadget bus, say
as a separate device type.

Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

Thanks for your patch, which is now commit fc274c1e997314bf ("USB:
gadget: Add a new bus for gadgets") in usb-next.

This patch cause a regression on the Renesas Salvator-XS development
board, as R-Car H3 has multiple USB gadget devices:

    sysfs: cannot create duplicate filename '/bus/gadget/devices/gadget'
    CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.18.0-rc1-arm64-renesas-00074-gfc274c1e9973 #1587
    Hardware name: Renesas Salvator-X 2nd version board based on r8a77951 (DT)
    Call trace:
     dump_backtrace+0xcc/0xd8
     show_stack+0x14/0x30
     dump_stack_lvl+0x88/0xb0
     dump_stack+0x14/0x2c
     sysfs_warn_dup+0x60/0x78
     sysfs_do_create_link_sd.isra.0+0xe4/0xf0
     sysfs_create_link+0x20/0x40
     bus_add_device+0x64/0x110
     device_add+0x31c/0x850
     usb_add_gadget+0x124/0x1a0
     usb_add_gadget_udc_release+0x1c/0x50
     usb_add_gadget_udc+0x10/0x18
     renesas_usb3_probe+0x450/0x728
     platform_probe+0x64/0xd0
     really_probe+0x100/0x2a0
     __driver_probe_device+0x74/0xd8
     driver_probe_device+0x3c/0xe0
     __driver_attach+0x80/0x110
     bus_for_each_dev+0x6c/0xc0
     driver_attach+0x20/0x28
     bus_add_driver+0x138/0x1e0
     driver_register+0x60/0x110
     __platform_driver_register+0x24/0x30
     renesas_usb3_driver_init+0x18/0x20
     do_one_initcall+0x15c/0x31c
     kernel_init_freeable+0x2f0/0x354
     kernel_init+0x20/0x120
     ret_from_fork+0x10/0x20
    renesas_usb3: probe of ee020000.usb failed with error -17
    ...
    renesas_usbhs: probe of e6590000.usb failed with error -17

After boot-up, only one gadget device is visible:

    root@h3-salvator-xs:~# ls -l /sys/bus/gadget/devices/
    total 0
    lrwxrwxrwx 1 root root 0 Feb 14  2019 gadget -> ../../../devices/platform/soc/e659c000.usb/gadget
    root@h3-salvator-xs:~#

Reverting this patch fixes the issue.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds



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

  Powered by Linux