1# SPDX-License-Identifier: GPL-2.0
2#
3# USB Gadget support on a system involves
4#    (a) a peripheral controller, and
5#    (b) the gadget driver using it.
6#
7# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
8#
9#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
10#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
11#  - Some systems have both kinds of controllers.
12#
13# With help from a special transceiver and a "Mini-AB" jack, systems with
14# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
15#
16
17#
18# USB Peripheral Controller Support
19#
20# The order here is alphabetical, except that integrated controllers go
21# before discrete ones so they will be the initial/default value:
22#   - integrated/SOC controllers first
23#   - licensed IP used in both SOC and discrete versions
24#   - discrete ones (including all PCI-only controllers)
25#   - debug/dummy gadget+hcd is last.
26#
27menu "USB Peripheral Controller"
28
29#
30# Integrated controllers
31#
32
33config USB_AT91
34	tristate "Atmel AT91 USB Device Port"
35	depends on ARCH_AT91
36	depends on OF || COMPILE_TEST
37	help
38	   Many Atmel AT91 processors (such as the AT91RM2000) have a
39	   full speed USB Device Port with support for five configurable
40	   endpoints (plus endpoint zero).
41
42	   Say "y" to link the driver statically, or "m" to build a
43	   dynamically linked module called "at91_udc" and force all
44	   gadget drivers to also be dynamically linked.
45
46config USB_LPC32XX
47	tristate "LPC32XX USB Peripheral Controller"
48	depends on ARCH_LPC32XX || COMPILE_TEST
49	depends on I2C
50	select USB_ISP1301
51	help
52	   This option selects the USB device controller in the LPC32xx SoC.
53
54	   Say "y" to link the driver statically, or "m" to build a
55	   dynamically linked module called "lpc32xx_udc" and force all
56	   gadget drivers to also be dynamically linked.
57
58config USB_ATMEL_USBA
59	tristate "Atmel USBA"
60	depends on ARCH_AT91
61	help
62	  USBA is the integrated high-speed USB Device controller on some
63	  AT91SAM9 and AT91CAP9 processors from Atmel.
64
65	  The fifo_mode parameter is used to select endpoint allocation mode.
66	  fifo_mode = 0 is used to let the driver autoconfigure the endpoints.
67	  In this case, for ep1 2 banks are allocated if it works in isochronous
68	  mode and only 1 bank otherwise. For the rest of the endpoints
69	  only 1 bank is allocated.
70
71	  fifo_mode = 1 is a generic maximum fifo size (1024 bytes) configuration
72	  allowing the usage of ep1 - ep6
73
74	  fifo_mode = 2 is a generic performance maximum fifo size (1024 bytes)
75	  configuration allowing the usage of ep1 - ep3
76
77	  fifo_mode = 3 is a balanced performance configuration allowing the
78	  the usage of ep1 - ep8
79
80config USB_BCM63XX_UDC
81	tristate "Broadcom BCM63xx Peripheral Controller"
82	depends on BCM63XX
83	help
84	   Many Broadcom BCM63xx chipsets (such as the BCM6328) have a
85	   high speed USB Device Port with support for four fixed endpoints
86	   (plus endpoint zero).
87
88	   Say "y" to link the driver statically, or "m" to build a
89	   dynamically linked module called "bcm63xx_udc".
90
91config USB_FSL_USB2
92	tristate "Freescale Highspeed USB DR Peripheral Controller"
93	depends on FSL_SOC
94	help
95	   Some of Freescale PowerPC and i.MX processors have a High Speed
96	   Dual-Role(DR) USB controller, which supports device mode.
97
98	   The number of programmable endpoints is different through
99	   SOC revisions.
100
101	   Say "y" to link the driver statically, or "m" to build a
102	   dynamically linked module called "fsl_usb2_udc" and force
103	   all gadget drivers to also be dynamically linked.
104
105config USB_FUSB300
106	tristate "Faraday FUSB300 USB Peripheral Controller"
107	depends on !PHYS_ADDR_T_64BIT && HAS_DMA
108	help
109	   Faraday usb device controller FUSB300 driver
110
111config USB_FOTG210_UDC
112	depends on HAS_DMA
113	tristate "Faraday FOTG210 USB Peripheral Controller"
114	help
115	   Faraday USB2.0 OTG controller which can be configured as
116	   high speed or full speed USB device. This driver supppors
117	   Bulk Transfer so far.
118
119	   Say "y" to link the driver statically, or "m" to build a
120	   dynamically linked module called "fotg210_udc".
121
122config USB_GR_UDC
123	tristate "Aeroflex Gaisler GRUSBDC USB Peripheral Controller Driver"
124	depends on HAS_DMA
125	help
126	  Select this to support Aeroflex Gaisler GRUSBDC cores from the GRLIB
127	  VHDL IP core library.
128
129config USB_OMAP
130	tristate "OMAP USB Device Controller"
131	depends on ARCH_OMAP1
132	depends on ISP1301_OMAP || !(MACH_OMAP_H2 || MACH_OMAP_H3)
133	help
134	   Many Texas Instruments OMAP processors have flexible full
135	   speed USB device controllers, with support for up to 30
136	   endpoints (plus endpoint zero).  This driver supports the
137	   controller in the OMAP 1611, and should work with controllers
138	   in other OMAP processors too, given minor tweaks.
139
140	   Say "y" to link the driver statically, or "m" to build a
141	   dynamically linked module called "omap_udc" and force all
142	   gadget drivers to also be dynamically linked.
143
144config USB_PXA25X
145	tristate "PXA 25x or IXP 4xx"
146	depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
147	depends on HAS_IOMEM
148	help
149	   Intel's PXA 25x series XScale ARM-5TE processors include
150	   an integrated full speed USB 1.1 device controller.  The
151	   controller in the IXP 4xx series is register-compatible.
152
153	   It has fifteen fixed-function endpoints, as well as endpoint
154	   zero (for control transfers).
155
156	   Say "y" to link the driver statically, or "m" to build a
157	   dynamically linked module called "pxa25x_udc" and force all
158	   gadget drivers to also be dynamically linked.
159
160# if there's only one gadget driver, using only two bulk endpoints,
161# don't waste memory for the other endpoints
162config USB_PXA25X_SMALL
163	depends on USB_PXA25X
164	bool
165	default n if USB_ETH_RNDIS
166	default y if USB_ZERO
167	default y if USB_ETH
168	default y if USB_G_SERIAL
169
170config USB_R8A66597
171	tristate "Renesas R8A66597 USB Peripheral Controller"
172	depends on HAS_DMA
173	help
174	   R8A66597 is a discrete USB host and peripheral controller chip that
175	   supports both full and high speed USB 2.0 data transfers.
176	   It has nine configurable endpoints, and endpoint zero.
177
178	   Say "y" to link the driver statically, or "m" to build a
179	   dynamically linked module called "r8a66597_udc" and force all
180	   gadget drivers to also be dynamically linked.
181
182config USB_RENESAS_USBHS_UDC
183	tristate 'Renesas USBHS controller'
184	depends on USB_RENESAS_USBHS
185	help
186	   Renesas USBHS is a discrete USB host and peripheral controller chip
187	   that supports both full and high speed USB 2.0 data transfers.
188	   It has nine or more configurable endpoints, and endpoint zero.
189
190	   Say "y" to link the driver statically, or "m" to build a
191	   dynamically linked module called "renesas_usbhs" and force all
192	   gadget drivers to also be dynamically linked.
193
194config USB_RENESAS_USB3
195	tristate 'Renesas USB3.0 Peripheral controller'
196	depends on ARCH_RENESAS || COMPILE_TEST
197	depends on EXTCON
198	select USB_ROLE_SWITCH
199	help
200	   Renesas USB3.0 Peripheral controller is a USB peripheral controller
201	   that supports super, high, and full speed USB 3.0 data transfers.
202
203	   Say "y" to link the driver statically, or "m" to build a
204	   dynamically linked module called "renesas_usb3" and force all
205	   gadget drivers to also be dynamically linked.
206
207config USB_PXA27X
208	tristate "PXA 27x"
209	depends on HAS_IOMEM
210	help
211	   Intel's PXA 27x series XScale ARM v5TE processors include
212	   an integrated full speed USB 1.1 device controller.
213
214	   It has up to 23 endpoints, as well as endpoint zero (for
215	   control transfers).
216
217	   Say "y" to link the driver statically, or "m" to build a
218	   dynamically linked module called "pxa27x_udc" and force all
219	   gadget drivers to also be dynamically linked.
220
221config USB_S3C2410
222	tristate "S3C2410 USB Device Controller"
223	depends on ARCH_S3C24XX
224	help
225	  Samsung's S3C2410 is an ARM-4 processor with an integrated
226	  full speed USB 1.1 device controller.  It has 4 configurable
227	  endpoints, as well as endpoint zero (for control transfers).
228
229	  This driver has been tested on the S3C2410, S3C2412, and
230	  S3C2440 processors.
231
232config USB_S3C2410_DEBUG
233	bool "S3C2410 udc debug messages"
234	depends on USB_S3C2410
235
236config USB_S3C_HSUDC
237	tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
238	depends on ARCH_S3C24XX
239	help
240	  Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC
241	  integrated with dual speed USB 2.0 device controller. It has
242	  8 endpoints, as well as endpoint zero.
243
244	  This driver has been tested on S3C2416 and S3C2450 processors.
245
246config USB_MV_UDC
247	tristate "Marvell USB2.0 Device Controller"
248	depends on HAS_DMA
249	help
250	  Marvell Socs (including PXA and MMP series) include a high speed
251	  USB2.0 OTG controller, which can be configured as high speed or
252	  full speed USB peripheral.
253
254config USB_MV_U3D
255	depends on HAS_DMA
256	tristate "MARVELL PXA2128 USB 3.0 controller"
257	help
258	  MARVELL PXA2128 Processor series include a super speed USB3.0 device
259	  controller, which support super speed USB peripheral.
260
261config USB_SNP_CORE
262	depends on (USB_AMD5536UDC || USB_SNP_UDC_PLAT)
263	depends on HAS_DMA
264	tristate
265	help
266	  This enables core driver support for Synopsys USB 2.0 Device
267	  controller.
268
269	  This will be enabled when PCI or Platform driver for this UDC is
270	  selected. Currently, this will be enabled by USB_SNP_UDC_PLAT or
271	  USB_AMD5536UDC options.
272
273	  This IP is different to the High Speed OTG IP that can be enabled
274	  by selecting USB_DWC2 or USB_DWC3 options.
275
276config USB_SNP_UDC_PLAT
277	tristate "Synopsys USB 2.0 Device controller"
278	depends on USB_GADGET && OF && HAS_DMA
279	depends on EXTCON || EXTCON=n
280	select USB_SNP_CORE
281	default ARCH_BCM_IPROC
282	help
283	  This adds Platform Device support for Synopsys Designware core
284	  AHB subsystem USB2.0 Device Controller (UDC).
285
286	  This driver works with UDCs integrated into Broadcom's Northstar2
287	  and Cygnus SoCs.
288
289	  If unsure, say N.
290#
291# Controllers available in both integrated and discrete versions
292#
293
294config USB_M66592
295	tristate "Renesas M66592 USB Peripheral Controller"
296	depends on HAS_IOMEM
297	help
298	   M66592 is a discrete USB peripheral controller chip that
299	   supports both full and high speed USB 2.0 data transfers.
300	   It has seven configurable endpoints, and endpoint zero.
301
302	   Say "y" to link the driver statically, or "m" to build a
303	   dynamically linked module called "m66592_udc" and force all
304	   gadget drivers to also be dynamically linked.
305
306source "drivers/usb/gadget/udc/bdc/Kconfig"
307
308#
309# Controllers available only in discrete form (and all PCI controllers)
310#
311
312config USB_AMD5536UDC
313	tristate "AMD5536 UDC"
314	depends on USB_PCI && HAS_DMA
315	select USB_SNP_CORE
316	help
317	   The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
318	   It is a USB Highspeed DMA capable USB device controller. Beside ep0
319	   it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
320	   The UDC port supports OTG operation, and may be used as a host port
321	   if it's not being used to implement peripheral or OTG roles.
322
323	   This UDC is based on Synopsys USB device controller IP and selects
324	   CONFIG_USB_SNP_CORE option to build the core driver.
325
326	   Say "y" to link the driver statically, or "m" to build a
327	   dynamically linked module called "amd5536udc" and force all
328	   gadget drivers to also be dynamically linked.
329
330config USB_FSL_QE
331	tristate "Freescale QE/CPM USB Device Controller"
332	depends on FSL_SOC && (QUICC_ENGINE || CPM)
333	depends on !64BIT || BROKEN
334	help
335	   Some of Freescale PowerPC processors have a Full Speed
336	   QE/CPM2 USB controller, which support device mode with 4
337	   programmable endpoints. This driver supports the
338	   controller in the MPC8360 and MPC8272, and should work with
339	   controllers having QE or CPM2, given minor tweaks.
340
341	   Set CONFIG_USB_GADGET to "m" to build this driver as a
342	   dynamically linked module called "fsl_qe_udc".
343
344config USB_NET2272
345	depends on HAS_IOMEM
346	tristate "PLX NET2272"
347	help
348	  PLX NET2272 is a USB peripheral controller which supports
349	  both full and high speed USB 2.0 data transfers.
350
351	  It has three configurable endpoints, as well as endpoint zero
352	  (for control transfer).
353	  Say "y" to link the driver statically, or "m" to build a
354	  dynamically linked module called "net2272" and force all
355	  gadget drivers to also be dynamically linked.
356
357config USB_NET2272_DMA
358	bool "Support external DMA controller"
359	depends on USB_NET2272 && HAS_DMA
360	help
361	  The NET2272 part can optionally support an external DMA
362	  controller, but your board has to have support in the
363	  driver itself.
364
365	  If unsure, say "N" here.  The driver works fine in PIO mode.
366
367config USB_NET2280
368	tristate "NetChip NET228x / PLX USB3x8x"
369	depends on USB_PCI
370	help
371	   NetChip 2280 / 2282 is a PCI based USB peripheral controller which
372	   supports both full and high speed USB 2.0 data transfers.
373
374	   It has six configurable endpoints, as well as endpoint zero
375	   (for control transfers) and several endpoints with dedicated
376	   functions.
377
378	   PLX 2380 is a PCIe version of the PLX 2380.
379
380	   PLX 3380 / 3382 is a PCIe based USB peripheral controller which
381	   supports full, high speed USB 2.0 and super speed USB 3.0
382	   data transfers.
383
384	   It has eight configurable endpoints, as well as endpoint zero
385	   (for control transfers) and several endpoints with dedicated
386	   functions.
387
388	   Say "y" to link the driver statically, or "m" to build a
389	   dynamically linked module called "net2280" and force all
390	   gadget drivers to also be dynamically linked.
391
392config USB_GOKU
393	tristate "Toshiba TC86C001 'Goku-S'"
394	depends on USB_PCI
395	help
396	   The Toshiba TC86C001 is a PCI device which includes controllers
397	   for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
398
399	   The device controller has three configurable (bulk or interrupt)
400	   endpoints, plus endpoint zero (for control transfers).
401
402	   Say "y" to link the driver statically, or "m" to build a
403	   dynamically linked module called "goku_udc" and to force all
404	   gadget drivers to also be dynamically linked.
405
406config USB_EG20T
407	tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
408	depends on USB_PCI
409	help
410	  This is a USB device driver for EG20T PCH.
411	  EG20T PCH is the platform controller hub that is used in Intel's
412	  general embedded platform. EG20T PCH has USB device interface.
413	  Using this interface, it is able to access system devices connected
414	  to USB device.
415	  This driver enables USB device function.
416	  USB device is a USB peripheral controller which
417	  supports both full and high speed USB 2.0 data transfers.
418	  This driver supports both control transfer and bulk transfer modes.
419	  This driver dose not support interrupt transfer or isochronous
420	  transfer modes.
421
422	  This driver also can be used for LAPIS Semiconductor's ML7213 which is
423	  for IVI(In-Vehicle Infotainment) use.
424	  ML7831 is for general purpose use.
425	  ML7213/ML7831 is companion chip for Intel Atom E6xx series.
426	  ML7213/ML7831 is completely compatible for Intel EG20T PCH.
427
428	  This driver can be used with Intel's Quark X1000 SOC platform
429
430config USB_GADGET_XILINX
431	tristate "Xilinx USB Driver"
432	depends on HAS_DMA
433	depends on OF || COMPILE_TEST
434	help
435	  USB peripheral controller driver for Xilinx USB2 device.
436	  Xilinx USB2 device is a soft IP which supports both full
437	  and high speed USB 2.0 data transfers. It has seven configurable
438	  endpoints(bulk or interrupt or isochronous), as well as
439	  endpoint zero(for control transfers).
440
441	  Say "y" to link the driver statically, or "m" to build a
442	  dynamically linked module called "udc-xilinx" and force all
443	  gadget drivers to also be dynamically linked.
444
445config USB_MAX3420_UDC
446	tristate "MAX3420 (USB-over-SPI) support"
447	depends on SPI
448	help
449	  The Maxim MAX3420 chip supports USB2.0 full-speed peripheral mode.
450	  The MAX3420 is run by SPI interface, and hence the dependency.
451
452	  To compile this driver as a module, choose M here: the module will
453	  be called max3420_udc
454
455config USB_TEGRA_XUDC
456	tristate "NVIDIA Tegra Superspeed USB 3.0 Device Controller"
457	depends on ARCH_TEGRA || COMPILE_TEST
458	depends on PHY_TEGRA_XUSB
459	help
460	 Enables NVIDIA Tegra USB 3.0 device mode controller driver.
461
462	 Say "y" to link the driver statically, or "m" to build a
463	 dynamically linked module called "tegra_xudc" and force all
464	 gadget drivers to also be dynamically linked.
465
466config USB_ASPEED_UDC
467	tristate "Aspeed UDC driver support"
468	depends on ARCH_ASPEED || COMPILE_TEST
469	depends on USB_LIBCOMPOSITE
470	help
471	  Enables Aspeed USB2.0 Device Controller driver for AST260x
472	  family SoCs. The controller supports 1 control endpoint and
473	  4 programmable endpoints.
474
475	  Say "y" to link the driver statically, or "m" to build a
476	  dynamically linked module called "aspeed_udc" and force all
477	  gadget drivers to also be dynamically linked.
478
479source "drivers/usb/gadget/udc/aspeed-vhub/Kconfig"
480
481#
482# LAST -- dummy/emulated controller
483#
484
485config USB_DUMMY_HCD
486	tristate "Dummy HCD (DEVELOPMENT)"
487	depends on USB=y || (USB=m && USB_GADGET=m)
488	help
489	  This host controller driver emulates USB, looping all data transfer
490	  requests back to a USB "gadget driver" in the same host.  The host
491	  side is the controller; the gadget side is the device.  Gadget drivers
492	  can be high, full, or low speed; and they have access to endpoints
493	  like those from NET2280, PXA2xx, or SA1100 hardware.
494
495	  This may help in some stages of creating a driver to embed in a
496	  Linux device, since it lets you debug several parts of the gadget
497	  driver without its hardware or drivers being involved.
498
499	  Since such a gadget side driver needs to interoperate with a host
500	  side Linux-USB device driver, this may help to debug both sides
501	  of a USB protocol stack.
502
503	  Say "y" to link the driver statically, or "m" to build a
504	  dynamically linked module called "dummy_hcd" and force all
505	  gadget drivers to also be dynamically linked.
506
507# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
508# first and will be selected by default.
509
510endmenu
511