Peter Chen <hzpeterchen@xxxxxxxxx> writes: > 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? I did actually have this one in my tree, but since that time this commit 7c8bfed7aaeba690de30835fe89882e1047a55fd Author: David Rientjes <rientjes@xxxxxxxxxx> Date: Fri Apr 26 13:25:01 2013 -0700 usb, chipidea: fix link error when USB_EHCI_HCD is a module has turned up in usb-next, and there's a conflict. So if you have time to have a look at this, I'd appreciate that. My tree is at the same address on github. Regards, -- Alex -- 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