Hi, On Mon, Jul 16, 2012 at 03:45:25PM +0200, Marc Kleine-Budde wrote: > >>> This is not the real problem. The problem is that USB_CHIPIDEA depends > >>> on USB (which is the Host side USB). So if you make host built-in, you > >>> can make chipidea built-in regardless of the gadget setting. That's the > >>> bug you want to solve. > >> > >> I don't think so. Have a look at the above mentioned undefined symbols: > >> "usb_gadget_unmap_request", they are implemented in: > >> > >> $git grep usb_gadget_unmap_request | grep EXPORT > >> drivers/usb/gadget/udc-core.c:EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); > > > > of course... that's because chipidea can be built-in while gadget isn't. > > The bug is exactly allowing chipidea to be built-in with no regards to > > the gadget side. > > > >> CONFIG_USB_CHIPIDEA=y > >> CONFIG_USB_GADGET=m > > > > there you go. Chipidea is built-in and gadget isn't. > > That's exactly what my patch fixes. yeah, but you fix it the wrong way. CONFIG_USB_CHIPIDEA should not depend on USB to start with. If you disable USB Host side, you can't compile chipidea driver. The patch below fixes most of the failures. Now the only problem is when we have both host and gadget enabled, if one of them is built-in, chipidea can be built-in regardless of the other. But that's something from the kbuild language I guess. diff --git a/drivers/usb/chipidea/Kconfig b/drivers/usb/chipidea/Kconfig index fd36dc8..e43bf69 100644 --- a/drivers/usb/chipidea/Kconfig +++ b/drivers/usb/chipidea/Kconfig @@ -1,6 +1,7 @@ config USB_CHIPIDEA tristate "ChipIdea Highspeed Dual Role Controller" - depends on USB + depends on USB_SUPPORT + depends on USB || USB_GADGET help Say Y here if your system has a dual role high speed USB controller based on ChipIdea silicon IP. Currently, only the @@ -10,20 +11,6 @@ config USB_CHIPIDEA if USB_CHIPIDEA -config USB_CHIPIDEA_UDC - bool "ChipIdea device controller" - depends on USB_GADGET - select USB_GADGET_DUALSPEED - help - Say Y here to enable device controller functionality of the - ChipIdea driver. - -config USB_CHIPIDEA_HOST - bool "ChipIdea host controller" - help - Say Y here to enable host controller functionality of the - ChipIdea driver. - config USB_CHIPIDEA_DEBUG bool "ChipIdea driver debug" help diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile index cc34937..545d8d2 100644 --- a/drivers/usb/chipidea/Makefile +++ b/drivers/usb/chipidea/Makefile @@ -1,8 +1,15 @@ obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc.o ci_hdrc-y := core.o -ci_hdrc-$(CONFIG_USB_CHIPIDEA_UDC) += udc.o -ci_hdrc-$(CONFIG_USB_CHIPIDEA_HOST) += host.o + +ifneq ($(CONFIG_USB_GADGET),) + ci_hdrc-y += udc.o +endif + +ifneq ($(CONFIG_USB),) + ci_hdrc-y += host.o +endif + ci_hdrc-$(CONFIG_USB_CHIPIDEA_DEBUG) += debug.o ifneq ($(CONFIG_PCI),) diff --git a/drivers/usb/chipidea/host.h b/drivers/usb/chipidea/host.h index 761fb1f..d52046e 100644 --- a/drivers/usb/chipidea/host.h +++ b/drivers/usb/chipidea/host.h @@ -1,7 +1,7 @@ #ifndef __DRIVERS_USB_CHIPIDEA_HOST_H #define __DRIVERS_USB_CHIPIDEA_HOST_H -#ifdef CONFIG_USB_CHIPIDEA_HOST +#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) int ci_hdrc_host_init(struct ci13xxx *ci); diff --git a/drivers/usb/chipidea/udc.h b/drivers/usb/chipidea/udc.h index 4ff2384d..8f7ec75 100644 --- a/drivers/usb/chipidea/udc.h +++ b/drivers/usb/chipidea/udc.h @@ -77,7 +77,7 @@ struct ci13xxx_req { dma_addr_t zdma; }; -#ifdef CONFIG_USB_CHIPIDEA_UDC +#if defined(CONFIG_USB_GADGET) || defined(CONFIG_USB_GADGET_MODULE) int ci_hdrc_gadget_init(struct ci13xxx *ci); -- balbi
Attachment:
signature.asc
Description: Digital signature