Hi Dinh, On 08/08/2014 11:13 PM, dinguyen@xxxxxxxxxxxxxxxxxxxxx wrote: > From: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx> > > Update DWC2 kconfig and makefile to support dual-role mode. The platform > file will always get compiled for the case where the controller is directly > connected to the CPU. So for loadable modules, only dwc2.ko is needed. > > Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx> > --- > v3: Add USB_GADGET=y and USB_GADGET=USB_DWC2 for peripheral and dual-role > config options. > v2: Remove reference to dwc2_gadget > --- > drivers/usb/dwc2/Kconfig | 63 +++++++++++++++++++++++++++-------------------- > drivers/usb/dwc2/Makefile | 21 ++++++++-------- > 2 files changed, 47 insertions(+), 37 deletions(-) > > diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig > index f93807b..4396a1f 100644 > --- a/drivers/usb/dwc2/Kconfig > +++ b/drivers/usb/dwc2/Kconfig > @@ -1,40 +1,29 @@ > config USB_DWC2 > - bool "DesignWare USB2 DRD Core Support" > + tristate "DesignWare USB2 DRD Core Support" > depends on USB > help > Say Y here if your system has a Dual Role Hi-Speed USB > controller based on the DesignWare HSOTG IP Core. > > - For host mode, if you choose to build the driver as dynamically > - linked modules, the core module will be called dwc2.ko, the PCI > - bus interface module (if you have a PCI bus system) will be > - called dwc2_pci.ko, and the platform interface module (for > - controllers directly connected to the CPU) will be called > - dwc2_platform.ko. For gadget mode, there will be a single > - module called dwc2_gadget.ko. > - > - NOTE: The s3c-hsotg driver is now renamed to dwc2_gadget. The > - host and gadget drivers are still currently separate drivers. > - There are plans to merge the dwc2_gadget driver with the dwc2 > - host driver in the near future to create a dual-role driver. > + If you choose to build the driver as dynamically > + linked modules, a single dwc2.ko(regardless of mode of operation) > + will get built for both platform IPs and PCI. > > if USB_DWC2 > > +choice > + bool "DWC2 Mode Selection" > + default USB_DWC2_DUAL_ROLE if (USB && USB_GADGET) > + default USB_DWC2_HOST if (USB && !USB_GADGET) > + default USB_DWC2_PERIPHERAL if (!USB && USB_GADGET) > + > config USB_DWC2_HOST > - tristate "Host only mode" > + bool "Host only mode" > depends on USB > help > The Designware USB2.0 high-speed host controller > - integrated into many SoCs. > - > -config USB_DWC2_PLATFORM > - bool "DWC2 Platform" > - depends on USB_DWC2_HOST > - default USB_DWC2_HOST > - help > - The Designware USB2.0 platform interface module for > - controllers directly connected to the CPU. This is only > - used for host mode. > + integrated into many SoCs. Select this option if you want the > + driver to operate in Host-only mode. > > config USB_DWC2_PCI > bool "DWC2 PCI" > @@ -47,11 +36,31 @@ config USB_DWC2_PCI > comment "Gadget mode requires USB Gadget support to be enabled" > > config USB_DWC2_PERIPHERAL > - tristate "Gadget only mode" > - depends on USB_GADGET > + bool "Gadget only mode" > + depends on USB_GADGET=y || USB_GADGET=USB_DWC2 > help > The Designware USB2.0 high-speed gadget controller > - integrated into many SoCs. > + integrated into many SoCs. Select this option if you want the > + driver to operate in Peripheral-only mode. This option requires > + USB_GADGET=y. > + > +config USB_DWC2_DUAL_ROLE > + bool "Dual Role mode" > + depends on ((USB=y || USB=USB_DWC2) && (USB_GADGET=y || USB_GADGET=USB_DWC2)) > + help > + Select this option if you want the driver to work in a dual-role > + mode. In this mode both host and gadget features are enabled, and > + the role will be determined by the cable that gets plugged-in. This > + option requires USB_GADGET=y. > +endchoice > + > +config USB_DWC2_PLATFORM > + bool > + depends on !PCI > + default y > + help > + The Designware USB2.0 platform interface module for > + controllers directly connected to the CPU. > > config USB_DWC2_DEBUG > bool "Enable Debugging Messages" > diff --git a/drivers/usb/dwc2/Makefile b/drivers/usb/dwc2/Makefile > index b73d2a5..3026135 100644 > --- a/drivers/usb/dwc2/Makefile > +++ b/drivers/usb/dwc2/Makefile > @@ -1,10 +1,17 @@ > ccflags-$(CONFIG_USB_DWC2_DEBUG) += -DDEBUG > ccflags-$(CONFIG_USB_DWC2_VERBOSE) += -DVERBOSE_DEBUG > > -obj-$(CONFIG_USB_DWC2_HOST) += dwc2.o > +obj-$(CONFIG_USB_DWC2) += dwc2.o > dwc2-y := core.o core_intr.o > -dwc2-y += hcd.o hcd_intr.o > -dwc2-y += hcd_queue.o hcd_ddma.o > + > +ifneq ($(filter y,$(CONFIG_USB_DWC2_HOST) $(CONFIG_USB_DWC2_DUAL_ROLE)),) > + dwc2-y += hcd.o hcd_intr.o > + dwc2-y += hcd_queue.o hcd_ddma.o > +endif > + > +ifneq ($(filter y,$(CONFIG_USB_DWC2_PERIPHERAL) $(CONFIG_USB_DWC2_DUAL_ROLE)),) > + dwc2-y += gadget.o > +endif > > # NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to > # this location and renamed gadget.c. When building for dynamically linked > @@ -19,10 +26,4 @@ ifneq ($(CONFIG_USB_DWC2_PCI),) > dwc2_pci-y := pci.o > endif > > -ifneq ($(CONFIG_USB_DWC2_PLATFORM),) > - obj-$(CONFIG_USB_DWC2_HOST) += dwc2_platform.o > - dwc2_platform-y := platform.o > -endif > - > -obj-$(CONFIG_USB_DWC2_PERIPHERAL) += dwc2_gadget.o > -dwc2_gadget-y := gadget.o > +dwc2-$(CONFIG_USB_DWC2_PLATFORM) += platform.o > This patch causes build break for me. I suppose it should be at the end of series to keep bisectability. I see it's already in Greg's tree, so I will prepare revert. Best regards Robert Baldyga -- 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