# 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
	select USB_ROLE_SWITCH if USB_DWC3_DUAL_ROLE
	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 SoC Platform"
	depends on (ARCH_EXYNOS || COMPILE_TEST) && OF
	default USB_DWC3
	help
	  Recent Samsung Exynos SoCs (Exynos5250, Exynos5410, Exynos542x,
	  Exynos5800, Exynos5433, Exynos7) 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.

config USB_DWC3_IMX8MP
	tristate "NXP iMX8MP Platform"
	depends on OF && COMMON_CLK
	depends on (ARCH_MXC && ARM64) || COMPILE_TEST
	default USB_DWC3
	help
	  NXP iMX8M Plus SoC use DesignWare Core IP for USB2/3
	  functionality.
	  Say 'Y' or 'M' if you have one such device.

config USB_DWC3_XILINX
	tristate "Xilinx Platforms"
	depends on (ARCH_ZYNQMP || ARCH_VERSAL) && OF
	default USB_DWC3
	help
	  Support Xilinx SoCs with DesignWare Core USB3 IP.
	  This driver handles both ZynqMP and Versal SoC operations.
	  Say 'Y' or 'M' if you have one such device.

config USB_DWC3_AM62
	tristate "Texas Instruments AM62 Platforms"
	depends on ARCH_K3 || COMPILE_TEST
	default USB_DWC3
	help
	  Support TI's AM62 platforms with DesignWare Core USB3 IP.
	  The Designware Core USB3 IP is progammed to operate in
	  in USB 2.0 mode only.
	  Say 'Y' or 'M' here if you have one such device
endif
