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 USB_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
