# SPDX-License-Identifier: GPL-2.0

config USB_DWC3
	tristate "DesignWare USB3 DRD Core Support"
	depends on (USB || USB_GADGET) && HAS_DMA
	depends on (EXTCON || EXTCON=n)
	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 as 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))
	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
	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 || COMPILE_TEST) && OF
	default USB_DWC3
	help
	  Support Xilinx SoCs with DesignWare Core USB3 IP.
	  This driver handles ZynqMP 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 programmed to operate in
	  in USB 2.0 mode only.
	  Say 'Y' or 'M' here if you have one such device

config USB_DWC3_OCTEON
	tristate "Cavium Octeon Platforms"
	depends on CAVIUM_OCTEON_SOC || COMPILE_TEST
	default USB_DWC3
	help
	  Support Cavium Octeon platforms with DesignWare Core USB3 IP.
	  Only the host mode is currently supported.
	  Say 'Y' or 'M' here if you have one such device.

config USB_DWC3_RTK
	tristate "Realtek DWC3 Platform Driver"
	depends on OF && ARCH_REALTEK
	default USB_DWC3
	select USB_ROLE_SWITCH
	help
	  RTK DHC RTD SoCs with DesignWare Core USB3 IP inside,
	  and IP Core configured for USB 2.0 and USB 3.0 in host
	  or dual-role mode.
	  Say 'Y' or 'M' if you have such device.

endif
