usb: gadget: Add support for RZ/V2M USB3DRD driver
[platform/kernel/linux-rpi.git] / drivers / usb / gadget / udc / Kconfig
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 #
27 menu "USB Peripheral Controller"
28
29 #
30 # Integrated controllers
31 #
32
33 config USB_AT91
34         tristate "Atmel AT91 USB Device Port"
35         depends on ARCH_AT91
36         depends on OF
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
46 config 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
58 config 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
80 config 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
91 config 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
105 config 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
111 config USB_GR_UDC
112         tristate "Aeroflex Gaisler GRUSBDC USB Peripheral Controller Driver"
113         depends on HAS_DMA
114         help
115           Select this to support Aeroflex Gaisler GRUSBDC cores from the GRLIB
116           VHDL IP core library.
117
118 config USB_OMAP
119         tristate "OMAP USB Device Controller"
120         depends on ARCH_OMAP1
121         depends on ISP1301_OMAP || !(MACH_OMAP_H2 || MACH_OMAP_H3)
122         help
123            Many Texas Instruments OMAP processors have flexible full
124            speed USB device controllers, with support for up to 30
125            endpoints (plus endpoint zero).  This driver supports the
126            controller in the OMAP 1611, and should work with controllers
127            in other OMAP processors too, given minor tweaks.
128
129            Say "y" to link the driver statically, or "m" to build a
130            dynamically linked module called "omap_udc" and force all
131            gadget drivers to also be dynamically linked.
132
133 config USB_PXA25X
134         tristate "PXA 25x or IXP 4xx"
135         depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
136         depends on HAS_IOMEM
137         help
138            Intel's PXA 25x series XScale ARM-5TE processors include
139            an integrated full speed USB 1.1 device controller.  The
140            controller in the IXP 4xx series is register-compatible.
141
142            It has fifteen fixed-function endpoints, as well as endpoint
143            zero (for control transfers).
144
145            Say "y" to link the driver statically, or "m" to build a
146            dynamically linked module called "pxa25x_udc" and force all
147            gadget drivers to also be dynamically linked.
148
149 # if there's only one gadget driver, using only two bulk endpoints,
150 # don't waste memory for the other endpoints
151 config USB_PXA25X_SMALL
152         depends on USB_PXA25X
153         bool
154         default n if USB_ETH_RNDIS
155         default y if USB_ZERO
156         default y if USB_ETH
157         default y if USB_G_SERIAL
158
159 config USB_R8A66597
160         tristate "Renesas R8A66597 USB Peripheral Controller"
161         depends on HAS_DMA
162         help
163            R8A66597 is a discrete USB host and peripheral controller chip that
164            supports both full and high speed USB 2.0 data transfers.
165            It has nine configurable endpoints, and endpoint zero.
166
167            Say "y" to link the driver statically, or "m" to build a
168            dynamically linked module called "r8a66597_udc" and force all
169            gadget drivers to also be dynamically linked.
170
171 config USB_RENESAS_USBHS_UDC
172         tristate 'Renesas USBHS controller'
173         depends on USB_RENESAS_USBHS
174         help
175            Renesas USBHS is a discrete USB host and peripheral controller chip
176            that supports both full and high speed USB 2.0 data transfers.
177            It has nine or more configurable endpoints, and endpoint zero.
178
179            Say "y" to link the driver statically, or "m" to build a
180            dynamically linked module called "renesas_usbhs" and force all
181            gadget drivers to also be dynamically linked.
182
183 config USB_RZV2M_USB3DRD
184         tristate 'Renesas USB3.1 DRD controller'
185         depends on ARCH_R9A09G011 || COMPILE_TEST
186         default USB_XHCI_RZV2M
187         default USB_RENESAS_USB3
188         help
189            Renesas USB3.1 DRD controller is a USB DRD controller
190            that supports both host and device switching.
191
192            Say "y" to link the driver statically, or "m" to build a
193            dynamically linked module called "rzv2m_usb3drd".
194
195 config USB_RENESAS_USB3
196         tristate 'Renesas USB3.0 Peripheral controller'
197         depends on ARCH_RENESAS || COMPILE_TEST
198         depends on EXTCON
199         select USB_RZV2M_USB3DRD if ARCH_R9A09G011
200         select USB_ROLE_SWITCH
201         help
202            Renesas USB3.0 Peripheral controller is a USB peripheral controller
203            that supports super, high, and full speed USB 3.0 data transfers.
204
205            Say "y" to link the driver statically, or "m" to build a
206            dynamically linked module called "renesas_usb3" and force all
207            gadget drivers to also be dynamically linked.
208
209 config USB_RENESAS_USBF
210         tristate 'Renesas USB Function controller'
211         depends on ARCH_RENESAS || COMPILE_TEST
212         help
213            Renesas USB Function controller is a USB peripheral controller
214            available on RZ/N1 Renesas SoCs.
215
216            Say "y" to link the driver statically, or "m" to build a
217            dynamically linked module called "renesas_usbf" and force all
218            gadget drivers to also be dynamically linked.
219
220 config USB_PXA27X
221         tristate "PXA 27x"
222         depends on HAS_IOMEM
223         help
224            Intel's PXA 27x series XScale ARM v5TE processors include
225            an integrated full speed USB 1.1 device controller.
226
227            It has up to 23 endpoints, as well as endpoint zero (for
228            control transfers).
229
230            Say "y" to link the driver statically, or "m" to build a
231            dynamically linked module called "pxa27x_udc" and force all
232            gadget drivers to also be dynamically linked.
233
234 config USB_S3C2410
235         tristate "S3C2410 USB Device Controller"
236         depends on ARCH_S3C24XX
237         help
238           Samsung's S3C2410 is an ARM-4 processor with an integrated
239           full speed USB 1.1 device controller.  It has 4 configurable
240           endpoints, as well as endpoint zero (for control transfers).
241
242           This driver has been tested on the S3C2410, S3C2412, and
243           S3C2440 processors.
244
245 config USB_S3C2410_DEBUG
246         bool "S3C2410 udc debug messages"
247         depends on USB_S3C2410
248
249 config USB_S3C_HSUDC
250         tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
251         depends on ARCH_S3C24XX
252         help
253           Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC
254           integrated with dual speed USB 2.0 device controller. It has
255           8 endpoints, as well as endpoint zero.
256
257           This driver has been tested on S3C2416 and S3C2450 processors.
258
259 config USB_MV_UDC
260         tristate "Marvell USB2.0 Device Controller"
261         depends on HAS_DMA
262         help
263           Marvell Socs (including PXA and MMP series) include a high speed
264           USB2.0 OTG controller, which can be configured as high speed or
265           full speed USB peripheral.
266
267 config USB_MV_U3D
268         depends on HAS_DMA
269         tristate "MARVELL PXA2128 USB 3.0 controller"
270         help
271           MARVELL PXA2128 Processor series include a super speed USB3.0 device
272           controller, which support super speed USB peripheral.
273
274 config USB_SNP_CORE
275         depends on (USB_AMD5536UDC || USB_SNP_UDC_PLAT)
276         depends on HAS_DMA
277         tristate
278         help
279           This enables core driver support for Synopsys USB 2.0 Device
280           controller.
281
282           This will be enabled when PCI or Platform driver for this UDC is
283           selected. Currently, this will be enabled by USB_SNP_UDC_PLAT or
284           USB_AMD5536UDC options.
285
286           This IP is different to the High Speed OTG IP that can be enabled
287           by selecting USB_DWC2 or USB_DWC3 options.
288
289 config USB_SNP_UDC_PLAT
290         tristate "Synopsys USB 2.0 Device controller"
291         depends on USB_GADGET && OF && HAS_DMA
292         depends on EXTCON || EXTCON=n
293         select USB_SNP_CORE
294         default ARCH_BCM_IPROC
295         help
296           This adds Platform Device support for Synopsys Designware core
297           AHB subsystem USB2.0 Device Controller (UDC).
298
299           This driver works with UDCs integrated into Broadcom's Northstar2
300           and Cygnus SoCs.
301
302           If unsure, say N.
303 #
304 # Controllers available in both integrated and discrete versions
305 #
306
307 config USB_M66592
308         tristate "Renesas M66592 USB Peripheral Controller"
309         depends on HAS_IOMEM
310         help
311            M66592 is a discrete USB peripheral controller chip that
312            supports both full and high speed USB 2.0 data transfers.
313            It has seven configurable endpoints, and endpoint zero.
314
315            Say "y" to link the driver statically, or "m" to build a
316            dynamically linked module called "m66592_udc" and force all
317            gadget drivers to also be dynamically linked.
318
319 source "drivers/usb/gadget/udc/bdc/Kconfig"
320
321 #
322 # Controllers available only in discrete form (and all PCI controllers)
323 #
324
325 config USB_AMD5536UDC
326         tristate "AMD5536 UDC"
327         depends on USB_PCI && HAS_DMA
328         select USB_SNP_CORE
329         help
330            The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
331            It is a USB Highspeed DMA capable USB device controller. Beside ep0
332            it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
333            The UDC port supports OTG operation, and may be used as a host port
334            if it's not being used to implement peripheral or OTG roles.
335
336            This UDC is based on Synopsys USB device controller IP and selects
337            CONFIG_USB_SNP_CORE option to build the core driver.
338
339            Say "y" to link the driver statically, or "m" to build a
340            dynamically linked module called "amd5536udc" and force all
341            gadget drivers to also be dynamically linked.
342
343 config USB_FSL_QE
344         tristate "Freescale QE/CPM USB Device Controller"
345         depends on FSL_SOC && (QUICC_ENGINE || CPM)
346         depends on !64BIT || BROKEN
347         help
348            Some of Freescale PowerPC processors have a Full Speed
349            QE/CPM2 USB controller, which support device mode with 4
350            programmable endpoints. This driver supports the
351            controller in the MPC8360 and MPC8272, and should work with
352            controllers having QE or CPM2, given minor tweaks.
353
354            Set CONFIG_USB_GADGET to "m" to build this driver as a
355            dynamically linked module called "fsl_qe_udc".
356
357 config USB_NET2272
358         depends on HAS_IOMEM
359         tristate "PLX NET2272"
360         help
361           PLX NET2272 is a USB peripheral controller which supports
362           both full and high speed USB 2.0 data transfers.
363
364           It has three configurable endpoints, as well as endpoint zero
365           (for control transfer).
366           Say "y" to link the driver statically, or "m" to build a
367           dynamically linked module called "net2272" and force all
368           gadget drivers to also be dynamically linked.
369
370 config USB_NET2272_DMA
371         bool "Support external DMA controller"
372         depends on USB_NET2272 && HAS_DMA
373         help
374           The NET2272 part can optionally support an external DMA
375           controller, but your board has to have support in the
376           driver itself.
377
378           If unsure, say "N" here.  The driver works fine in PIO mode.
379
380 config USB_NET2280
381         tristate "NetChip NET228x / PLX USB3x8x"
382         depends on USB_PCI
383         help
384            NetChip 2280 / 2282 is a PCI based USB peripheral controller which
385            supports both full and high speed USB 2.0 data transfers.
386
387            It has six configurable endpoints, as well as endpoint zero
388            (for control transfers) and several endpoints with dedicated
389            functions.
390
391            PLX 2380 is a PCIe version of the PLX 2380.
392
393            PLX 3380 / 3382 is a PCIe based USB peripheral controller which
394            supports full, high speed USB 2.0 and super speed USB 3.0
395            data transfers.
396
397            It has eight configurable endpoints, as well as endpoint zero
398            (for control transfers) and several endpoints with dedicated
399            functions.
400
401            Say "y" to link the driver statically, or "m" to build a
402            dynamically linked module called "net2280" and force all
403            gadget drivers to also be dynamically linked.
404
405 config USB_GOKU
406         tristate "Toshiba TC86C001 'Goku-S'"
407         depends on USB_PCI
408         help
409            The Toshiba TC86C001 is a PCI device which includes controllers
410            for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
411
412            The device controller has three configurable (bulk or interrupt)
413            endpoints, plus endpoint zero (for control transfers).
414
415            Say "y" to link the driver statically, or "m" to build a
416            dynamically linked module called "goku_udc" and to force all
417            gadget drivers to also be dynamically linked.
418
419 config USB_EG20T
420         tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
421         depends on USB_PCI
422         help
423           This is a USB device driver for EG20T PCH.
424           EG20T PCH is the platform controller hub that is used in Intel's
425           general embedded platform. EG20T PCH has USB device interface.
426           Using this interface, it is able to access system devices connected
427           to USB device.
428           This driver enables USB device function.
429           USB device is a USB peripheral controller which
430           supports both full and high speed USB 2.0 data transfers.
431           This driver supports both control transfer and bulk transfer modes.
432           This driver dose not support interrupt transfer or isochronous
433           transfer modes.
434
435           This driver also can be used for LAPIS Semiconductor's ML7213 which is
436           for IVI(In-Vehicle Infotainment) use.
437           ML7831 is for general purpose use.
438           ML7213/ML7831 is companion chip for Intel Atom E6xx series.
439           ML7213/ML7831 is completely compatible for Intel EG20T PCH.
440
441           This driver can be used with Intel's Quark X1000 SOC platform
442
443 config USB_GADGET_XILINX
444         tristate "Xilinx USB Driver"
445         depends on HAS_DMA
446         depends on OF
447         help
448           USB peripheral controller driver for Xilinx USB2 device.
449           Xilinx USB2 device is a soft IP which supports both full
450           and high speed USB 2.0 data transfers. It has seven configurable
451           endpoints(bulk or interrupt or isochronous), as well as
452           endpoint zero(for control transfers).
453
454           Say "y" to link the driver statically, or "m" to build a
455           dynamically linked module called "udc-xilinx" and force all
456           gadget drivers to also be dynamically linked.
457
458 config USB_MAX3420_UDC
459         tristate "MAX3420 (USB-over-SPI) support"
460         depends on SPI
461         help
462           The Maxim MAX3420 chip supports USB2.0 full-speed peripheral mode.
463           The MAX3420 is run by SPI interface, and hence the dependency.
464
465           To compile this driver as a module, choose M here: the module will
466           be called max3420_udc
467
468 config USB_TEGRA_XUDC
469         tristate "NVIDIA Tegra Superspeed USB 3.0 Device Controller"
470         depends on ARCH_TEGRA || COMPILE_TEST
471         depends on PHY_TEGRA_XUSB
472         help
473          Enables NVIDIA Tegra USB 3.0 device mode controller driver.
474
475          Say "y" to link the driver statically, or "m" to build a
476          dynamically linked module called "tegra_xudc" and force all
477          gadget drivers to also be dynamically linked.
478
479 config USB_ASPEED_UDC
480         tristate "Aspeed UDC driver support"
481         depends on ARCH_ASPEED || COMPILE_TEST
482         depends on USB_LIBCOMPOSITE
483         help
484           Enables Aspeed USB2.0 Device Controller driver for AST260x
485           family SoCs. The controller supports 1 control endpoint and
486           4 programmable endpoints.
487
488           Say "y" to link the driver statically, or "m" to build a
489           dynamically linked module called "aspeed_udc" and force all
490           gadget drivers to also be dynamically linked.
491
492 source "drivers/usb/gadget/udc/aspeed-vhub/Kconfig"
493
494 #
495 # LAST -- dummy/emulated controller
496 #
497
498 config USB_DUMMY_HCD
499         tristate "Dummy HCD (DEVELOPMENT)"
500         depends on USB=y || (USB=m && USB_GADGET=m)
501         help
502           This host controller driver emulates USB, looping all data transfer
503           requests back to a USB "gadget driver" in the same host.  The host
504           side is the controller; the gadget side is the device.  Gadget drivers
505           can be high, full, or low speed; and they have access to endpoints
506           like those from NET2280, PXA2xx, or SA1100 hardware.
507
508           This may help in some stages of creating a driver to embed in a
509           Linux device, since it lets you debug several parts of the gadget
510           driver without its hardware or drivers being involved.
511
512           Since such a gadget side driver needs to interoperate with a host
513           side Linux-USB device driver, this may help to debug both sides
514           of a USB protocol stack.
515
516           Say "y" to link the driver statically, or "m" to build a
517           dynamically linked module called "dummy_hcd" and force all
518           gadget drivers to also be dynamically linked.
519
520 # NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
521 # first and will be selected by default.
522
523 endmenu