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