config USB_DWC2
	tristate "DesignWare USB2 DRD Core Support"
	depends on HAS_DMA
	depends on USB || USB_GADGET
	depends on HAS_IOMEM
	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 all modes(host, gadget and dual-role), there
	  will be an additional module named dwc2.ko.

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
	bool "Host only mode"
	depends on USB=y || (USB_DWC2=m && 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.

comment "Gadget/Dual-role 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
	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 to be enabled.

config USB_DWC2_DUAL_ROLE
	bool "Dual Role mode"
	depends on (USB=y && USB_GADGET=y) || (USB_DWC2=m && USB && USB_GADGET)
	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 to be enabled.
endchoice

config USB_DWC2_PCI
	tristate "DWC2 PCI"
	depends on PCI
	depends on USB_GADGET || !USB_GADGET
	default n
	select NOP_USB_XCEIV
	help
	  The Designware USB2.0 PCI interface module for controllers
	  connected to a PCI bus.

config USB_DWC2_DEBUG
	bool "Enable Debugging Messages"
	help
	  Say Y here to enable debugging messages in the DWC2 Driver.

config USB_DWC2_VERBOSE
	bool "Enable Verbose Debugging Messages"
	depends on USB_DWC2_DEBUG
	help
	  Say Y here to enable verbose debugging messages in the DWC2 Driver.
	  WARNING: Enabling this will quickly fill your message log.
	  If in doubt, say N.

config USB_DWC2_TRACK_MISSED_SOFS
	bool "Enable Missed SOF Tracking"
	help
	  Say Y here to enable logging of missed SOF events to the dmesg log.
	  WARNING: This feature is still experimental.
	  If in doubt, say N.

config USB_DWC2_DEBUG_PERIODIC
	bool "Enable Debugging Messages For Periodic Transfers"
	depends on USB_DWC2_DEBUG || USB_DWC2_VERBOSE
	default y
	help
	  Say N here to disable (verbose) debugging messages to be
	  logged for periodic transfers. This allows better debugging of
	  non-periodic transfers, but of course the debug logs will be
	  incomplete. Note that this also disables some debug messages
	  for which the transfer type cannot be deduced.
endif
