config USB_DWC2
	tristate "DesignWare USB2 DRD Core Support"
	depends on HAS_DMA
	depends on USB || USB_GADGET
	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
	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
