On 8/1/14, 4:41 PM, Dinh Nguyen wrote: > On Fri, 2014-08-01 at 20:42 +0000, Paul Zimmerman wrote: >>> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-owner@xxxxxxxxxxxxxxx] On Behalf Of dinguyen@xxxxxxxxxx >>> Sent: Wednesday, July 30, 2014 8:21 AM >>> >>> 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@xxxxxxxxxx> >>> --- >>> v2: Remove reference to dwc2_gadget >>> --- >>> drivers/usb/dwc2/Kconfig | 59 +++++++++++++++++++++++++-------------------- >>> drivers/usb/dwc2/Makefile | 21 ++++++++-------- >>> 2 files changed, 44 insertions(+), 36 deletions(-) >>> >>> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig >>> index f93807b..3d69928 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,29 @@ config USB_DWC2_PCI >>> comment "Gadget mode requires USB Gadget support to be enabled" >>> >>> config USB_DWC2_PERIPHERAL >>> - tristate "Gadget only mode" >>> + bool "Gadget only mode" >>> depends on USB_GADGET >>> 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. >>> + >>> +config USB_DWC2_DUAL_ROLE >>> + bool "Dual Role mode" >>> + depends on ((USB=y || USB=USB_DWC2) && (USB_GADGET=y)) >> >> Hi Dinh, >> >> I just noticed that for dual-role mode, you are not allowing USB_GADGET >> to be modular. Is there a reason for that? If so, please mention it in >> the commit message. It should also be explained in the help text. Or >> maybe add another comment line saying "Dual-role mode requires USB Gadget >> = y" or something like that. >> > > I think it was an oversight on my part and there's not reason why > USB_GADGET can't be modular. > I went back to look this for v3 and it appears that I need USB_GADGET=y to avoid a build error when building the new driver for Gadget or Dual-role. drivers/built-in.o: In function `dwc2_gadget_init': /home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3516: undefined reference to `usb_add_gadget_udc' drivers/built-in.o: In function `s3c_hsotg_remove': /home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3543: undefined reference to `usb_del_gadget_udc' /home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3549: undefined reference to `usb_gadget_unregister_driver' So just like the DWC3 driver, I need to add a dependency on USB_GADGET=y. I'll add a note to the help text. Dinh -- 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