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
63	  the AT32AP700x, some 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 || ARCH_MXC
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
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	help
334	   Some of Freescale PowerPC processors have a Full Speed
335	   QE/CPM2 USB controller, which support device mode with 4
336	   programmable endpoints. This driver supports the
337	   controller in the MPC8360 and MPC8272, and should work with
338	   controllers having QE or CPM2, given minor tweaks.
339
340	   Set CONFIG_USB_GADGET to "m" to build this driver as a
341	   dynamically linked module called "fsl_qe_udc".
342
343config USB_NET2272
344	depends on HAS_IOMEM
345	tristate "PLX NET2272"
346	help
347	  PLX NET2272 is a USB peripheral controller which supports
348	  both full and high speed USB 2.0 data transfers.
349
350	  It has three configurable endpoints, as well as endpoint zero
351	  (for control transfer).
352	  Say "y" to link the driver statically, or "m" to build a
353	  dynamically linked module called "net2272" and force all
354	  gadget drivers to also be dynamically linked.
355
356config USB_NET2272_DMA
357	bool "Support external DMA controller"
358	depends on USB_NET2272 && HAS_DMA
359	help
360	  The NET2272 part can optionally support an external DMA
361	  controller, but your board has to have support in the
362	  driver itself.
363
364	  If unsure, say "N" here.  The driver works fine in PIO mode.
365
366config USB_NET2280
367	tristate "NetChip NET228x / PLX USB3x8x"
368	depends on USB_PCI
369	help
370	   NetChip 2280 / 2282 is a PCI based USB peripheral controller which
371	   supports both full and high speed USB 2.0 data transfers.
372
373	   It has six configurable endpoints, as well as endpoint zero
374	   (for control transfers) and several endpoints with dedicated
375	   functions.
376
377	   PLX 2380 is a PCIe version of the PLX 2380.
378
379	   PLX 3380 / 3382 is a PCIe based USB peripheral controller which
380	   supports full, high speed USB 2.0 and super speed USB 3.0
381	   data transfers.
382
383	   It has eight configurable endpoints, as well as endpoint zero
384	   (for control transfers) and several endpoints with dedicated
385	   functions.
386
387	   Say "y" to link the driver statically, or "m" to build a
388	   dynamically linked module called "net2280" and force all
389	   gadget drivers to also be dynamically linked.
390
391config USB_GOKU
392	tristate "Toshiba TC86C001 'Goku-S'"
393	depends on USB_PCI
394	help
395	   The Toshiba TC86C001 is a PCI device which includes controllers
396	   for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
397
398	   The device controller has three configurable (bulk or interrupt)
399	   endpoints, plus endpoint zero (for control transfers).
400
401	   Say "y" to link the driver statically, or "m" to build a
402	   dynamically linked module called "goku_udc" and to force all
403	   gadget drivers to also be dynamically linked.
404
405config USB_EG20T
406	tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
407	depends on USB_PCI
408	help
409	  This is a USB device driver for EG20T PCH.
410	  EG20T PCH is the platform controller hub that is used in Intel's
411	  general embedded platform. EG20T PCH has USB device interface.
412	  Using this interface, it is able to access system devices connected
413	  to USB device.
414	  This driver enables USB device function.
415	  USB device is a USB peripheral controller which
416	  supports both full and high speed USB 2.0 data transfers.
417	  This driver supports both control transfer and bulk transfer modes.
418	  This driver dose not support interrupt transfer or isochronous
419	  transfer modes.
420
421	  This driver also can be used for LAPIS Semiconductor's ML7213 which is
422	  for IVI(In-Vehicle Infotainment) use.
423	  ML7831 is for general purpose use.
424	  ML7213/ML7831 is companion chip for Intel Atom E6xx series.
425	  ML7213/ML7831 is completely compatible for Intel EG20T PCH.
426
427	  This driver can be used with Intel's Quark X1000 SOC platform
428
429config USB_GADGET_XILINX
430	tristate "Xilinx USB Driver"
431	depends on HAS_DMA
432	depends on OF || COMPILE_TEST
433	help
434	  USB peripheral controller driver for Xilinx USB2 device.
435	  Xilinx USB2 device is a soft IP which supports both full
436	  and high speed USB 2.0 data transfers. It has seven configurable
437	  endpoints(bulk or interrupt or isochronous), as well as
438	  endpoint zero(for control transfers).
439
440	  Say "y" to link the driver statically, or "m" to build a
441	  dynamically linked module called "udc-xilinx" and force all
442	  gadget drivers to also be dynamically linked.
443
444source "drivers/usb/gadget/udc/aspeed-vhub/Kconfig"
445
446#
447# LAST -- dummy/emulated controller
448#
449
450config USB_DUMMY_HCD
451	tristate "Dummy HCD (DEVELOPMENT)"
452	depends on USB=y || (USB=m && USB_GADGET=m)
453	help
454	  This host controller driver emulates USB, looping all data transfer
455	  requests back to a USB "gadget driver" in the same host.  The host
456	  side is the master; the gadget side is the slave.  Gadget drivers
457	  can be high, full, or low speed; and they have access to endpoints
458	  like those from NET2280, PXA2xx, or SA1100 hardware.
459
460	  This may help in some stages of creating a driver to embed in a
461	  Linux device, since it lets you debug several parts of the gadget
462	  driver without its hardware or drivers being involved.
463
464	  Since such a gadget side driver needs to interoperate with a host
465	  side Linux-USB device driver, this may help to debug both sides
466	  of a USB protocol stack.
467
468	  Say "y" to link the driver statically, or "m" to build a
469	  dynamically linked module called "dummy_hcd" and force all
470	  gadget drivers to also be dynamically linked.
471
472# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
473# first and will be selected by default.
474
475endmenu
476