On 05/08/13 03:02, Peter Chen wrote: > Randy Dunlap <rdunlap@xxxxxxxxxxxxx> reported below problem > at i386: >> drivers/built-in.o: In function `ci_hdrc_host_init': >> (.text+0x2ce75c): undefined reference to `ehci_init_driver' > >> When USB_EHCI_HCD=m and USB_CHIPIDEA=y. > > In fact, this problem is existed at all platforms which are using > chipidea driver. The root cause of this problem is the chipidea host > uses symbol exported from ehci-hcd, but chipidea core > does not depends on USB_EHCI_HCD. So, chipidea driver > will not be compiled as module if USB_EHCI_HCD=m. > > It is very hard to give a perfect solution since chipidea core > depends on USB || USB_GADGET, and chipdiea host depends on > both USB_EHCI_HCD and USB_CHIPIDEA, the same problem exists for > gadget. > > To fix this problem, we had to have below assumptions: > > - If USB_EHCI_HCD=y && USB_GADGET=y, USB_CHIPIDEA can be 'y'. > > - If USB_EHCI_HCD=m && USB_GADGET=y, USB_CHIPIDEA=m > or USB_CHIPIDEA_HOST can't be seen if USB_CHIPIDEA=y. > It will cause compile error as no glue layer for ehci. >> error: #error "missing bus glue for ehci-hcd" > So, we had to compile USB_CHIPIDEA=m if USB_EHCI_HCD=m, > current ehci hcd core guarantee it. > > - If USB_EHCI_HCD=y && USB_GADGET=m, USB_CHIPIDEA=m > or USB_CHIPIDEA_UDC can't be seen if USB_CHIPIDEA=y. > Of cos, the gadget will out of working at this situation, > so the user had to compile USB_CHIPIDEA=m. > > - USB_EHCI_HCD=m && USB_GADGET=m, we can't see > USB_CHIPIDEA_HOST and USB_CHIPIDEA_UDC unless > USB_CHIPIDEA=m. > > The reason why it has abvoe assumptions: > - If both ehci core and gadget core build as module, > the chipidea has to build as module. > - If one of ehci core or gadget core is built in, another > is built as module, we can only enable the function which > is built in, or enable both roles as modules (USB_CHIPIDEA=m), > since chipidea driver is unify core driver, the host or udc > is not a individual driver. > > Signed-off-by: Peter Chen <peter.chen@xxxxxxxxxxxxx> Acked-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Thanks. > --- > drivers/usb/chipidea/Kconfig | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/chipidea/Kconfig b/drivers/usb/chipidea/Kconfig > index 608a2ae..eb2aa2e 100644 > --- a/drivers/usb/chipidea/Kconfig > +++ b/drivers/usb/chipidea/Kconfig > @@ -12,15 +12,15 @@ if USB_CHIPIDEA > > config USB_CHIPIDEA_UDC > bool "ChipIdea device controller" > - depends on USB_GADGET=y || USB_GADGET=USB_CHIPIDEA > + depends on USB_GADGET=y || USB_CHIPIDEA=m > help > Say Y here to enable device controller functionality of the > ChipIdea driver. > > config USB_CHIPIDEA_HOST > bool "ChipIdea host controller" > - depends on USB=y || USB=USB_CHIPIDEA > - depends on USB_EHCI_HCD > + depends on USB=y > + depends on USB_EHCI_HCD=y || USB_CHIPIDEA=m > select USB_EHCI_ROOT_HUB_TT > help > Say Y here to enable host controller functionality of the > -- ~Randy -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html