config USB_DWC2
-       tristate "DesignWare USB2 DRD Core Support"
+       bool "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.
 
-         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.
+         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.
 
-if USB_DWC2
+         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.
 
-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)
+if USB_DWC2
 
 config USB_DWC2_HOST
-       bool "Host only mode"
+       tristate "Host only mode"
        depends on USB
        help
          The Designware USB2.0 high-speed host controller
-         integrated into many SoCs. Select this option if you want the
-         driver to operate in Host-only mode.
+         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.
 
 config USB_DWC2_PCI
        bool "DWC2 PCI"
 comment "Gadget mode requires USB Gadget support to be enabled"
 
 config USB_DWC2_PERIPHERAL
-       bool "Gadget only mode"
-       depends on USB_GADGET=y || USB_GADGET=USB_DWC2
+       tristate "Gadget only mode"
+       depends on USB_GADGET
        help
          The Designware USB2.0 high-speed gadget controller
-         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.
+         integrated into many SoCs.
 
 config USB_DWC2_DEBUG
        bool "Enable Debugging Messages"
 
 ccflags-$(CONFIG_USB_DWC2_DEBUG)       += -DDEBUG
 ccflags-$(CONFIG_USB_DWC2_VERBOSE)     += -DVERBOSE_DEBUG
 
-obj-$(CONFIG_USB_DWC2)                 += dwc2.o
+obj-$(CONFIG_USB_DWC2_HOST)            += dwc2.o
 dwc2-y                                 := core.o core_intr.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
+dwc2-y                                 += hcd.o hcd_intr.o
+dwc2-y                                 += hcd_queue.o hcd_ddma.o
 
 # NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to
 # this location and renamed gadget.c. When building for dynamically linked
        dwc2_pci-y                      := pci.o
 endif
 
-dwc2-$(CONFIG_USB_DWC2_PLATFORM) += platform.o
+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