# 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 && 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.

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
