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