Hi, On Sat, Jan 03, 2015 at 10:53:20PM +1100, Daniel Tang wrote: > Hi, > > I’ve run into a problem which I suspect is to with how > usb_gadget_probe_driver is implemented in > drivers/usb/gadget/udc/udc-core.c > > I have an embedded system that uses the Chipidea OTG controller. > Unfortunately, when it boots up, the driver is loaded but there’s no > USB gadget that gets attached to it. I’m building the USB gadget > support into the kernel. statically linking gadget drivers has an old known problem which nobody has been able to provide a good solution. If you wanna tackle it, we'll review patches, for sure. > Here’s a snippet of the boot log: > > Console: switching to colour frame buffer device 40x30 > Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled > Serial: AMBA driver > brd: module loaded > ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver > zevio_usb b0000000.usb: ci_hdrc_zevio_probe > zevio_usb b0000000.usb: ci_hdrc_add_device failed! > platform b0000000.usb: Driver zevio_usb requests probe deferral > userial_init: registered 4 ttyGS* devices > couldn't find an available UDC > mousedev: PS/2 mouse device common for all mice > usbcore: registered new interface driver usbhid > usbhid: USB HID core driver > zevio_usb b0000000.usb: ci_hdrc_zevio_probe > ci_hdrc ci_hdrc.0: ChipIdea HDRC found, lpm: 0; cap: c4882100 op: c4882140 > ci_hdrc ci_hdrc.0: It is OTG capable controller > USB VBUS output: disabling > RAMDISK: gzip image found at block 0 > > It seems that because the Chipidea driver requests a probe deferral > (presumably to wait for some device it depends on to get probed), it > doesn’t get loaded before usb_gadget_probe_driver is called. Hence, > usb_gadget_probe_driver doesn’t find anything it can bind to and it > errors out. By the time the Chipidea driver actually finishes getting > probed, it’s too late to bind any gadgets to. > > Does this sound like a reasonable diagnosis? What can we do about it? yeah, that's correct. -- balbi
Attachment:
signature.asc
Description: Digital signature