# SPDX-License-Identifier: GPL-2.0

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