# 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 || ARCH_MXC
	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
	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)
	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_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 master; the gadget side is the slave.  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
