On Thu, May 9, 2013 at 3:51 AM, Randy Dunlap <rdunlap@xxxxxxxxxxxxx> wrote: > 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 >> > > Alex, will you queue this one? -- BR, Peter Chen -- 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