# SPDX-License-Identifier: GPL-2.0
#
# USB Gadget support on a system involves
#    (a) a peripheral controller, and
#    (b) the gadget driver using it.
#
# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
#
#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
#  - Some systems have both kinds of controllers.
#
# With help from a special transceiver and a "Mini-AB" jack, systems with
# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
#

#
# USB Peripheral Controller Support
#
# The order here is alphabetical, except that integrated controllers go
# before discrete ones so they will be the initial/default value:
#   - integrated/SOC controllers first
#   - licensed IP used in both SOC and discrete versions
#   - discrete ones (including all PCI-only controllers)
#   - debug/dummy gadget+hcd is last.
#
menu "USB Peripheral Controller"

#
# Integrated controllers
#

config USB_AT91
	tristate "Atmel AT91 USB Device Port"
	depends on ARCH_AT91
	depends on OF || COMPILE_TEST
	help
	   Many Atmel AT91 processors (such as the AT91RM2000) have a
	   full speed USB Device Port with support for five configurable
	   endpoints (plus endpoint zero).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "at91_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_LPC32XX
	tristate "LPC32XX USB Peripheral Controller"
	depends on ARCH_LPC32XX || COMPILE_TEST
	depends on I2C
	select USB_ISP1301
	help
	   This option selects the USB device controller in the LPC32xx SoC.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "lpc32xx_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_ATMEL_USBA
	tristate "Atmel USBA"
	depends on ARCH_AT91
	help
	  USBA is the integrated high-speed USB Device controller on
	  the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.

	  The fifo_mode parameter is used to select endpoint allocation mode.
	  fifo_mode = 0 is used to let the driver autoconfigure the endpoints.
	  In this case, for ep1 2 banks are allocated if it works in isochronous
	  mode and only 1 bank otherwise. For the rest of the endpoints
	  only 1 bank is allocated.

	  fifo_mode = 1 is a generic maximum fifo size (1024 bytes) configuration
	  allowing the usage of ep1 - ep6

	  fifo_mode = 2 is a generic performance maximum fifo size (1024 bytes)
	  configuration allowing the usage of ep1 - ep3

	  fifo_mode = 3 is a balanced performance configuration allowing the
	  the usage of ep1 - ep8

config USB_BCM63XX_UDC
	tristate "Broadcom BCM63xx Peripheral Controller"
	depends on BCM63XX
	help
	   Many Broadcom BCM63xx chipsets (such as the BCM6328) have a
	   high speed USB Device Port with support for four fixed endpoints
	   (plus endpoint zero).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "bcm63xx_udc".

config USB_FSL_USB2
	tristate "Freescale Highspeed USB DR Peripheral Controller"
	depends on FSL_SOC
	help
	   Some of Freescale PowerPC and i.MX processors have a High Speed
	   Dual-Role(DR) USB controller, which supports device mode.

	   The number of programmable endpoints is different through
	   SOC revisions.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "fsl_usb2_udc" and force
	   all gadget drivers to also be dynamically linked.

config USB_FUSB300
	tristate "Faraday FUSB300 USB Peripheral Controller"
	depends on !PHYS_ADDR_T_64BIT && HAS_DMA
	help
	   Faraday usb device controller FUSB300 driver

config USB_FOTG210_UDC
	depends on HAS_DMA
	tristate "Faraday FOTG210 USB Peripheral Controller"
	help
	   Faraday USB2.0 OTG controller which can be configured as
	   high speed or full speed USB device. This driver supppors
	   Bulk Transfer so far.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "fotg210_udc".

config USB_GR_UDC
	tristate "Aeroflex Gaisler GRUSBDC USB Peripheral Controller Driver"
	depends on HAS_DMA
	help
	  Select this to support Aeroflex Gaisler GRUSBDC cores from the GRLIB
	  VHDL IP core library.

config USB_OMAP
	tristate "OMAP USB Device Controller"
	depends on ARCH_OMAP1
	depends on ISP1301_OMAP || !(MACH_OMAP_H2 || MACH_OMAP_H3)
	help
	   Many Texas Instruments OMAP processors have flexible full
	   speed USB device controllers, with support for up to 30
	   endpoints (plus endpoint zero).  This driver supports the
	   controller in the OMAP 1611, and should work with controllers
	   in other OMAP processors too, given minor tweaks.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "omap_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA25X
	tristate "PXA 25x or IXP 4xx"
	depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
	depends on HAS_IOMEM
	help
	   Intel's PXA 25x series XScale ARM-5TE processors include
	   an integrated full speed USB 1.1 device controller.  The
	   controller in the IXP 4xx series is register-compatible.

	   It has fifteen fixed-function endpoints, as well as endpoint
	   zero (for control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "pxa25x_udc" and force all
	   gadget drivers to also be dynamically linked.

# if there's only one gadget driver, using only two bulk endpoints,
# don't waste memory for the other endpoints
config USB_PXA25X_SMALL
	depends on USB_PXA25X
	bool
	default n if USB_ETH_RNDIS
	default y if USB_ZERO
	default y if USB_ETH
	default y if USB_G_SERIAL

config USB_R8A66597
	tristate "Renesas R8A66597 USB Peripheral Controller"
	depends on HAS_DMA
	help
	   R8A66597 is a discrete USB host and peripheral controller chip that
	   supports both full and high speed USB 2.0 data transfers.
	   It has nine configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "r8a66597_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_RENESAS_USBHS_UDC
	tristate 'Renesas USBHS controller'
	depends on USB_RENESAS_USBHS
	help
	   Renesas USBHS is a discrete USB host and peripheral controller chip
	   that supports both full and high speed USB 2.0 data transfers.
	   It has nine or more configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "renesas_usbhs" and force all
	   gadget drivers to also be dynamically linked.

config USB_RENESAS_USB3
	tristate 'Renesas USB3.0 Peripheral controller'
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on EXTCON
	select USB_ROLE_SWITCH
	help
	   Renesas USB3.0 Peripheral controller is a USB peripheral controller
	   that supports super, high, and full speed USB 3.0 data transfers.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "renesas_usb3" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA27X
	tristate "PXA 27x"
	depends on HAS_IOMEM
	help
	   Intel's PXA 27x series XScale ARM v5TE processors include
	   an integrated full speed USB 1.1 device controller.

	   It has up to 23 endpoints, as well as endpoint zero (for
	   control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "pxa27x_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_S3C2410
	tristate "S3C2410 USB Device Controller"
	depends on ARCH_S3C24XX
	help
	  Samsung's S3C2410 is an ARM-4 processor with an integrated
	  full speed USB 1.1 device controller.  It has 4 configurable
	  endpoints, as well as endpoint zero (for control transfers).

	  This driver has been tested on the S3C2410, S3C2412, and
	  S3C2440 processors.

config USB_S3C2410_DEBUG
	bool "S3C2410 udc debug messages"
	depends on USB_S3C2410

config USB_S3C_HSUDC
	tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
	depends on ARCH_S3C24XX
	help
	  Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC
	  integrated with dual speed USB 2.0 device controller. It has
	  8 endpoints, as well as endpoint zero.

	  This driver has been tested on S3C2416 and S3C2450 processors.

config USB_MV_UDC
	tristate "Marvell USB2.0 Device Controller"
	depends on HAS_DMA
	help
	  Marvell Socs (including PXA and MMP series) include a high speed
	  USB2.0 OTG controller, which can be configured as high speed or
	  full speed USB peripheral.

config USB_MV_U3D
	depends on HAS_DMA
	tristate "MARVELL PXA2128 USB 3.0 controller"
	help
	  MARVELL PXA2128 Processor series include a super speed USB3.0 device
	  controller, which support super speed USB peripheral.

config USB_SNP_CORE
	depends on (USB_AMD5536UDC || USB_SNP_UDC_PLAT)
	depends on HAS_DMA
	tristate
	help
	  This enables core driver support for Synopsys USB 2.0 Device
	  controller.

	  This will be enabled when PCI or Platform driver for this UDC is
	  selected. Currently, this will be enabled by USB_SNP_UDC_PLAT or
	  USB_AMD5536UDC options.

	  This IP is different to the High Speed OTG IP that can be enabled
	  by selecting USB_DWC2 or USB_DWC3 options.

config USB_SNP_UDC_PLAT
	tristate "Synopsys USB 2.0 Device controller"
	depends on USB_GADGET && OF && HAS_DMA
	depends on EXTCON || EXTCON=n
	select USB_SNP_CORE
	default ARCH_BCM_IPROC
	help
	  This adds Platform Device support for Synopsys Designware core
	  AHB subsystem USB2.0 Device Controller (UDC).

	  This driver works with UDCs integrated into Broadcom's Northstar2
	  and Cygnus SoCs.

	  If unsure, say N.
#
# Controllers available in both integrated and discrete versions
#

config USB_M66592
	tristate "Renesas M66592 USB Peripheral Controller"
	depends on HAS_IOMEM
	help
	   M66592 is a discrete USB peripheral controller chip that
	   supports both full and high speed USB 2.0 data transfers.
	   It has seven configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "m66592_udc" and force all
	   gadget drivers to also be dynamically linked.

source "drivers/usb/gadget/udc/bdc/Kconfig"

#
# Controllers available only in discrete form (and all PCI controllers)
#

config USB_AMD5536UDC
	tristate "AMD5536 UDC"
	depends on USB_PCI && HAS_DMA
	select USB_SNP_CORE
	help
	   The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
	   It is a USB Highspeed DMA capable USB device controller. Beside ep0
	   it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
	   The UDC port supports OTG operation, and may be used as a host port
	   if it's not being used to implement peripheral or OTG roles.

	   This UDC is based on Synopsys USB device controller IP and selects
	   CONFIG_USB_SNP_CORE option to build the core driver.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "amd5536udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_FSL_QE
	tristate "Freescale QE/CPM USB Device Controller"
	depends on FSL_SOC && (QUICC_ENGINE || CPM)
	depends on !64BIT || BROKEN
	help
	   Some of Freescale PowerPC processors have a Full Speed
	   QE/CPM2 USB controller, which support device mode with 4
	   programmable endpoints. This driver supports the
	   controller in the MPC8360 and MPC8272, and should work with
	   controllers having QE or CPM2, given minor tweaks.

	   Set CONFIG_USB_GADGET to "m" to build this driver as a
	   dynamically linked module called "fsl_qe_udc".

config USB_NET2272
	depends on HAS_IOMEM
	tristate "PLX NET2272"
	help
	  PLX NET2272 is a USB peripheral controller which supports
	  both full and high speed USB 2.0 data transfers.

	  It has three configurable endpoints, as well as endpoint zero
	  (for control transfer).
	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "net2272" and force all
	  gadget drivers to also be dynamically linked.

config USB_NET2272_DMA
	bool "Support external DMA controller"
	depends on USB_NET2272 && HAS_DMA
	help
	  The NET2272 part can optionally support an external DMA
	  controller, but your board has to have support in the
	  driver itself.

	  If unsure, say "N" here.  The driver works fine in PIO mode.

config USB_NET2280
	tristate "NetChip NET228x / PLX USB3x8x"
	depends on USB_PCI
	help
	   NetChip 2280 / 2282 is a PCI based USB peripheral controller which
	   supports both full and high speed USB 2.0 data transfers.

	   It has six configurable endpoints, as well as endpoint zero
	   (for control transfers) and several endpoints with dedicated
	   functions.

	   PLX 2380 is a PCIe version of the PLX 2380.

	   PLX 3380 / 3382 is a PCIe based USB peripheral controller which
	   supports full, high speed USB 2.0 and super speed USB 3.0
	   data transfers.

	   It has eight configurable endpoints, as well as endpoint zero
	   (for control transfers) and several endpoints with dedicated
	   functions.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "net2280" and force all
	   gadget drivers to also be dynamically linked.

config USB_GOKU
	tristate "Toshiba TC86C001 'Goku-S'"
	depends on USB_PCI
	help
	   The Toshiba TC86C001 is a PCI device which includes controllers
	   for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).

	   The device controller has three configurable (bulk or interrupt)
	   endpoints, plus endpoint zero (for control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "goku_udc" and to force all
	   gadget drivers to also be dynamically linked.

config USB_EG20T
	tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
	depends on USB_PCI
	help
	  This is a USB device driver for EG20T PCH.
	  EG20T PCH is the platform controller hub that is used in Intel's
	  general embedded platform. EG20T PCH has USB device interface.
	  Using this interface, it is able to access system devices connected
	  to USB device.
	  This driver enables USB device function.
	  USB device is a USB peripheral controller which
	  supports both full and high speed USB 2.0 data transfers.
	  This driver supports both control transfer and bulk transfer modes.
	  This driver dose not support interrupt transfer or isochronous
	  transfer modes.

	  This driver also can be used for LAPIS Semiconductor's ML7213 which is
	  for IVI(In-Vehicle Infotainment) use.
	  ML7831 is for general purpose use.
	  ML7213/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7213/ML7831 is completely compatible for Intel EG20T PCH.

	  This driver can be used with Intel's Quark X1000 SOC platform

config USB_GADGET_XILINX
	tristate "Xilinx USB Driver"
	depends on HAS_DMA
	depends on OF || COMPILE_TEST
	help
	  USB peripheral controller driver for Xilinx USB2 device.
	  Xilinx USB2 device is a soft IP which supports both full
	  and high speed USB 2.0 data transfers. It has seven configurable
	  endpoints(bulk or interrupt or isochronous), as well as
	  endpoint zero(for control transfers).

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "udc-xilinx" and force all
	  gadget drivers to also be dynamically linked.

config USB_MAX3420_UDC
	tristate "MAX3420 (USB-over-SPI) support"
	depends on SPI
	help
	  The Maxim MAX3420 chip supports USB2.0 full-speed peripheral mode.
	  The MAX3420 is run by SPI interface, and hence the dependency.

	  To compile this driver as a module, choose M here: the module will
	  be called max3420_udc

config USB_TEGRA_XUDC
	tristate "NVIDIA Tegra Superspeed USB 3.0 Device Controller"
	depends on ARCH_TEGRA || COMPILE_TEST
	depends on PHY_TEGRA_XUSB
	help
	 Enables NVIDIA Tegra USB 3.0 device mode controller driver.

	 Say "y" to link the driver statically, or "m" to build a
	 dynamically linked module called "tegra_xudc" and force all
	 gadget drivers to also be dynamically linked.

source "drivers/usb/gadget/udc/aspeed-vhub/Kconfig"

#
# LAST -- dummy/emulated controller
#

config USB_DUMMY_HCD
	tristate "Dummy HCD (DEVELOPMENT)"
	depends on USB=y || (USB=m && USB_GADGET=m)
	help
	  This host controller driver emulates USB, looping all data transfer
	  requests back to a USB "gadget driver" in the same host.  The host
	  side is the controller; the gadget side is the device.  Gadget drivers
	  can be high, full, or low speed; and they have access to endpoints
	  like those from NET2280, PXA2xx, or SA1100 hardware.

	  This may help in some stages of creating a driver to embed in a
	  Linux device, since it lets you debug several parts of the gadget
	  driver without its hardware or drivers being involved.

	  Since such a gadget side driver needs to interoperate with a host
	  side Linux-USB device driver, this may help to debug both sides
	  of a USB protocol stack.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "dummy_hcd" and force all
	  gadget drivers to also be dynamically linked.

# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
# first and will be selected by default.

endmenu
