Hello, On 07/16/2012 04:20 PM, Felipe Balbi 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 Okay. Point taken. My patch only fixes the regression which was introduced in "5e0aa49 usb: chipidea: use generic map/unmap routines". Just a minimal patch to go into the current release cycle. > 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. Hmmm...Same problem as before, but now also for the host side. I've wrapped my head around the problem and I think a found something...I'm not sure how "nice" the solution is. > 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 ^^^^^^^^^^^ not needed as it is included from drivers/usb/Kconfig inside the big ifdef USB_SUPPORT...endif. (At least on 3.5-rc7) > + 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 What about the select? Marc > - 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); > > -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
Attachment:
signature.asc
Description: OpenPGP digital signature