# SPDX-License-Identifier: GPL-2.0

config USB_DWC3
	tristate "DesignWare USB3 DRD Core Support"
	depends on (USB || USB_GADGET) && HAS_DMA
	select USB_XHCI_PLATFORM if USB_XHCI_HCD
	help
	  Say Y or M here if your system has a Dual Role SuperSpeed
	  USB controller based on the DesignWare USB3 IP Core.

	  If you choose to build this driver is a dynamically linked
	  module, the module will be called dwc3.ko.

if USB_DWC3

config USB_DWC3_ULPI
	bool "Register ULPI PHY Interface"
	depends on USB_ULPI_BUS=y || USB_ULPI_BUS=USB_DWC3
	help
	  Select this if you have ULPI type PHY attached to your DWC3
	  controller.

choice
	bool "DWC3 Mode Selection"
	default USB_DWC3_DUAL_ROLE if (USB && USB_GADGET)
	default USB_DWC3_HOST if (USB && !USB_GADGET)
	default USB_DWC3_GADGET if (!USB && USB_GADGET)

config USB_DWC3_HOST
	bool "Host only mode"
	depends on USB=y || USB=USB_DWC3
	help
	  Select this when you want to use DWC3 in host mode only,
	  thereby the gadget feature will be regressed.

config USB_DWC3_GADGET
	bool "Gadget only mode"
	depends on USB_GADGET=y || USB_GADGET=USB_DWC3
	help
	  Select this when you want to use DWC3 in gadget mode only,
	  thereby the host feature will be regressed.

config USB_DWC3_DUAL_ROLE
	bool "Dual Role mode"
	depends on ((USB=y || USB=USB_DWC3) && (USB_GADGET=y || USB_GADGET=USB_DWC3))
	depends on (EXTCON=y || EXTCON=USB_DWC3)
	help
	  This is the default mode of working of DWC3 controller where
	  both host and gadget features are enabled.

endchoice

comment "Platform Glue Driver Support"

config USB_DWC3_OMAP
	tristate "Texas Instruments OMAP5 and similar Platforms"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	depends on EXTCON || !EXTCON
	depends on OF
	default USB_DWC3
	help
	  Some platforms from Texas Instruments like OMAP5, DRA7xxx and
	  AM437x use this IP for USB2/3 functionality.

	  Say 'Y' or 'M' here if you have one such device

config USB_DWC3_EXYNOS
	tristate "Samsung Exynos Platform"
	depends on (ARCH_EXYNOS || COMPILE_TEST) && OF
	default USB_DWC3
	help
	  Recent Exynos5 SoCs ship with one DesignWare Core USB3 IP inside,
	  say 'Y' or 'M' if you have one such device.

config USB_DWC3_PCI
	tristate "PCIe-based Platforms"
	depends on USB_PCI && ACPI
	default USB_DWC3
	help
	  If you're using the DesignWare Core IP with a PCIe (but not HAPS
	  platform), please say 'Y' or 'M' here.

config USB_DWC3_HAPS
	tristate "Synopsys PCIe-based HAPS Platforms"
	depends on USB_PCI
	default USB_DWC3
	help
	  If you're using the DesignWare Core IP with a Synopsys PCIe HAPS
	  platform, please say 'Y' or 'M' here.

config USB_DWC3_KEYSTONE
	tristate "Texas Instruments Keystone2/AM654 Platforms"
	depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST
	default USB_DWC3
	help
	  Support of USB2/3 functionality in TI Keystone2 and AM654 platforms.
	  Say 'Y' or 'M' here if you have one such device

config USB_DWC3_MESON_G12A
	tristate "Amlogic Meson G12A Platforms"
	depends on OF && COMMON_CLK
	depends on ARCH_MESON || COMPILE_TEST
	default USB_DWC3
	select USB_ROLE_SWITCH
	select REGMAP_MMIO
	help
	  Support USB2/3 functionality in Amlogic G12A platforms.
	  Say 'Y' or 'M' if you have one such device.

config USB_DWC3_OF_SIMPLE
	tristate "Generic OF Simple Glue Layer"
	depends on OF && COMMON_CLK
	default USB_DWC3
	help
	  Support USB2/3 functionality in simple SoC integrations.
	  Currently supports Xilinx and Qualcomm DWC USB3 IP.
	  Say 'Y' or 'M' if you have one such device.

config USB_DWC3_ST
	tristate "STMicroelectronics Platforms"
	depends on (ARCH_STI || COMPILE_TEST) && OF
	default USB_DWC3
	help
	  STMicroelectronics SoCs with one DesignWare Core USB3 IP
	  inside (i.e. STiH407).
	  Say 'Y' or 'M' if you have one such device.

config USB_DWC3_QCOM
	tristate "Qualcomm Platform"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on EXTCON || !EXTCON
	depends on (OF || ACPI)
	default USB_DWC3
	help
	  Some Qualcomm SoCs use DesignWare Core IP for USB2/3
	  functionality.
	  This driver also handles Qscratch wrapper which is needed
	  for peripheral mode support.
	  Say 'Y' or 'M' if you have one such device.

endif
