xref: /linux/drivers/usb/gadget/Kconfig (revision 5f4123be3cdb1dbd77fa9d6d2bb96bb9689a0a19)
1#
2# USB Gadget support on a system involves
3#    (a) a peripheral controller, and
4#    (b) the gadget driver using it.
5#
6# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
7#
8#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
9#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
10#  - Some systems have both kinds of controllers.
11#
12# With help from a special transceiver and a "Mini-AB" jack, systems with
13# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
14#
15
16menuconfig USB_GADGET
17	tristate "USB Gadget Support"
18	help
19	   USB is a master/slave protocol, organized with one master
20	   host (such as a PC) controlling up to 127 peripheral devices.
21	   The USB hardware is asymmetric, which makes it easier to set up:
22	   you can't connect a "to-the-host" connector to a peripheral.
23
24	   Linux can run in the host, or in the peripheral.  In both cases
25	   you need a low level bus controller driver, and some software
26	   talking to it.  Peripheral controllers are often discrete silicon,
27	   or are integrated with the CPU in a microcontroller.  The more
28	   familiar host side controllers have names like "EHCI", "OHCI",
29	   or "UHCI", and are usually integrated into southbridges on PC
30	   motherboards.
31
32	   Enable this configuration option if you want to run Linux inside
33	   a USB peripheral device.  Configure one hardware driver for your
34	   peripheral/device side bus controller, and a "gadget driver" for
35	   your peripheral protocol.  (If you use modular gadget drivers,
36	   you may configure more than one.)
37
38	   If in doubt, say "N" and don't enable these drivers; most people
39	   don't have this kind of hardware (except maybe inside Linux PDAs).
40
41	   For more information, see <http://www.linux-usb.org/gadget> and
42	   the kernel DocBook documentation for this API.
43
44if USB_GADGET
45
46config USB_GADGET_DEBUG
47	boolean "Debugging messages (DEVELOPMENT)"
48	depends on USB_GADGET && DEBUG_KERNEL
49	help
50	   Many controller and gadget drivers will print some debugging
51	   messages if you use this option to ask for those messages.
52
53	   Avoid enabling these messages, even if you're actively
54	   debugging such a driver.  Many drivers will emit so many
55	   messages that the driver timings are affected, which will
56	   either create new failure modes or remove the one you're
57	   trying to track down.  Never enable these messages for a
58	   production build.
59
60config USB_GADGET_DEBUG_FILES
61	boolean "Debugging information files (DEVELOPMENT)"
62	depends on USB_GADGET && PROC_FS
63	help
64	   Some of the drivers in the "gadget" framework can expose
65	   debugging information in files such as /proc/driver/udc
66	   (for a peripheral controller).  The information in these
67	   files may help when you're troubleshooting or bringing up a
68	   driver on a new board.   Enable these files by choosing "Y"
69	   here.  If in doubt, or to conserve kernel memory, say "N".
70
71config USB_GADGET_DEBUG_FS
72	boolean "Debugging information files in debugfs (DEVELOPMENT)"
73	depends on USB_GADGET && DEBUG_FS
74	help
75	   Some of the drivers in the "gadget" framework can expose
76	   debugging information in files under /sys/kernel/debug/.
77	   The information in these files may help when you're
78	   troubleshooting or bringing up a driver on a new board.
79	   Enable these files by choosing "Y" here.  If in doubt, or
80	   to conserve kernel memory, say "N".
81
82config	USB_GADGET_SELECTED
83	boolean
84
85#
86# USB Peripheral Controller Support
87#
88choice
89	prompt "USB Peripheral Controller"
90	depends on USB_GADGET
91	help
92	   A USB device uses a controller to talk to its host.
93	   Systems should have only one such upstream link.
94	   Many controller drivers are platform-specific; these
95	   often need board-specific hooks.
96
97config USB_GADGET_AMD5536UDC
98	boolean "AMD5536 UDC"
99	depends on PCI
100	select USB_GADGET_DUALSPEED
101	help
102	   The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
103	   It is a USB Highspeed DMA capable USB device controller. Beside ep0
104	   it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
105	   The UDC port supports OTG operation, and may be used as a host port
106	   if it's not being used to implement peripheral or OTG roles.
107
108	   Say "y" to link the driver statically, or "m" to build a
109	   dynamically linked module called "amd5536udc" and force all
110	   gadget drivers to also be dynamically linked.
111
112config USB_AMD5536UDC
113	tristate
114	depends on USB_GADGET_AMD5536UDC
115	default USB_GADGET
116	select USB_GADGET_SELECTED
117
118config USB_GADGET_ATMEL_USBA
119	boolean "Atmel USBA"
120	select USB_GADGET_DUALSPEED
121	depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL
122	help
123	  USBA is the integrated high-speed USB Device controller on
124	  the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
125
126config USB_ATMEL_USBA
127	tristate
128	depends on USB_GADGET_ATMEL_USBA
129	default USB_GADGET
130	select USB_GADGET_SELECTED
131
132config USB_GADGET_FSL_USB2
133	boolean "Freescale Highspeed USB DR Peripheral Controller"
134	depends on FSL_SOC
135	select USB_GADGET_DUALSPEED
136	help
137	   Some of Freescale PowerPC processors have a High Speed
138	   Dual-Role(DR) USB controller, which supports device mode.
139
140	   The number of programmable endpoints is different through
141	   SOC revisions.
142
143	   Say "y" to link the driver statically, or "m" to build a
144	   dynamically linked module called "fsl_usb2_udc" and force
145	   all gadget drivers to also be dynamically linked.
146
147config USB_FSL_USB2
148	tristate
149	depends on USB_GADGET_FSL_USB2
150	default USB_GADGET
151	select USB_GADGET_SELECTED
152
153config USB_GADGET_NET2280
154	boolean "NetChip 228x"
155	depends on PCI
156	select USB_GADGET_DUALSPEED
157	help
158	   NetChip 2280 / 2282 is a PCI based USB peripheral controller which
159	   supports both full and high speed USB 2.0 data transfers.
160
161	   It has six configurable endpoints, as well as endpoint zero
162	   (for control transfers) and several endpoints with dedicated
163	   functions.
164
165	   Say "y" to link the driver statically, or "m" to build a
166	   dynamically linked module called "net2280" and force all
167	   gadget drivers to also be dynamically linked.
168
169config USB_NET2280
170	tristate
171	depends on USB_GADGET_NET2280
172	default USB_GADGET
173	select USB_GADGET_SELECTED
174
175config USB_GADGET_PXA25X
176	boolean "PXA 25x or IXP 4xx"
177	depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
178	help
179	   Intel's PXA 25x series XScale ARM-5TE processors include
180	   an integrated full speed USB 1.1 device controller.  The
181	   controller in the IXP 4xx series is register-compatible.
182
183	   It has fifteen fixed-function endpoints, as well as endpoint
184	   zero (for control transfers).
185
186	   Say "y" to link the driver statically, or "m" to build a
187	   dynamically linked module called "pxa25x_udc" and force all
188	   gadget drivers to also be dynamically linked.
189
190config USB_PXA25X
191	tristate
192	depends on USB_GADGET_PXA25X
193	default USB_GADGET
194	select USB_GADGET_SELECTED
195
196# if there's only one gadget driver, using only two bulk endpoints,
197# don't waste memory for the other endpoints
198config USB_PXA25X_SMALL
199	depends on USB_GADGET_PXA25X
200	bool
201	default n if USB_ETH_RNDIS
202	default y if USB_ZERO
203	default y if USB_ETH
204	default y if USB_G_SERIAL
205
206config USB_GADGET_M66592
207	boolean "Renesas M66592 USB Peripheral Controller"
208	select USB_GADGET_DUALSPEED
209	help
210	   M66592 is a discrete USB peripheral controller chip that
211	   supports both full and high speed USB 2.0 data transfers.
212	   It has seven configurable endpoints, and endpoint zero.
213
214	   Say "y" to link the driver statically, or "m" to build a
215	   dynamically linked module called "m66592_udc" and force all
216	   gadget drivers to also be dynamically linked.
217
218config USB_M66592
219	tristate
220	depends on USB_GADGET_M66592
221	default USB_GADGET
222	select USB_GADGET_SELECTED
223
224config SUPERH_BUILT_IN_M66592
225	boolean "Enable SuperH built-in USB like the M66592"
226	depends on USB_GADGET_M66592 && CPU_SUBTYPE_SH7722
227	help
228	   SH7722 has USB like the M66592.
229
230	   The transfer rate is very slow when use "Ethernet Gadget".
231	   However, this problem is improved if change a value of
232	   NET_IP_ALIGN to 4.
233
234config USB_GADGET_PXA27X
235	boolean "PXA 27x"
236	depends on ARCH_PXA && PXA27x
237	help
238	   Intel's PXA 27x series XScale ARM v5TE processors include
239	   an integrated full speed USB 1.1 device controller.
240
241	   It has up to 23 endpoints, as well as endpoint zero (for
242	   control transfers).
243
244	   Say "y" to link the driver statically, or "m" to build a
245	   dynamically linked module called "pxa27x_udc" and force all
246	   gadget drivers to also be dynamically linked.
247
248config USB_PXA27X
249	tristate
250	depends on USB_GADGET_PXA27X
251	default USB_GADGET
252	select USB_GADGET_SELECTED
253
254config USB_GADGET_GOKU
255	boolean "Toshiba TC86C001 'Goku-S'"
256	depends on PCI
257	help
258	   The Toshiba TC86C001 is a PCI device which includes controllers
259	   for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
260
261	   The device controller has three configurable (bulk or interrupt)
262	   endpoints, plus endpoint zero (for control transfers).
263
264	   Say "y" to link the driver statically, or "m" to build a
265	   dynamically linked module called "goku_udc" and to force all
266	   gadget drivers to also be dynamically linked.
267
268config USB_GOKU
269	tristate
270	depends on USB_GADGET_GOKU
271	default USB_GADGET
272	select USB_GADGET_SELECTED
273
274
275config USB_GADGET_LH7A40X
276	boolean "LH7A40X"
277	depends on ARCH_LH7A40X
278	help
279    This driver provides USB Device Controller driver for LH7A40x
280
281config USB_LH7A40X
282	tristate
283	depends on USB_GADGET_LH7A40X
284	default USB_GADGET
285	select USB_GADGET_SELECTED
286
287# built in ../musb along with host support
288config USB_GADGET_MUSB_HDRC
289	boolean "Inventra HDRC USB Peripheral (TI, ...)"
290	depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
291	select USB_GADGET_DUALSPEED
292	select USB_GADGET_SELECTED
293	help
294	  This OTG-capable silicon IP is used in dual designs including
295	  the TI DaVinci, OMAP 243x, OMAP 343x, and TUSB 6010.
296
297config USB_GADGET_OMAP
298	boolean "OMAP USB Device Controller"
299	depends on ARCH_OMAP
300	select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
301	help
302	   Many Texas Instruments OMAP processors have flexible full
303	   speed USB device controllers, with support for up to 30
304	   endpoints (plus endpoint zero).  This driver supports the
305	   controller in the OMAP 1611, and should work with controllers
306	   in other OMAP processors too, given minor tweaks.
307
308	   Say "y" to link the driver statically, or "m" to build a
309	   dynamically linked module called "omap_udc" and force all
310	   gadget drivers to also be dynamically linked.
311
312config USB_OMAP
313	tristate
314	depends on USB_GADGET_OMAP
315	default USB_GADGET
316	select USB_GADGET_SELECTED
317
318config USB_OTG
319	boolean "OTG Support"
320	depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
321	help
322	   The most notable feature of USB OTG is support for a
323	   "Dual-Role" device, which can act as either a device
324	   or a host.  The initial role choice can be changed
325	   later, when two dual-role devices talk to each other.
326
327	   Select this only if your OMAP board has a Mini-AB connector.
328
329config USB_GADGET_S3C2410
330	boolean "S3C2410 USB Device Controller"
331	depends on ARCH_S3C2410
332	help
333	  Samsung's S3C2410 is an ARM-4 processor with an integrated
334	  full speed USB 1.1 device controller.  It has 4 configurable
335	  endpoints, as well as endpoint zero (for control transfers).
336
337	  This driver has been tested on the S3C2410, S3C2412, and
338	  S3C2440 processors.
339
340config USB_S3C2410
341	tristate
342	depends on USB_GADGET_S3C2410
343	default USB_GADGET
344	select USB_GADGET_SELECTED
345
346config USB_S3C2410_DEBUG
347	boolean "S3C2410 udc debug messages"
348	depends on USB_GADGET_S3C2410
349
350config USB_GADGET_AT91
351	boolean "AT91 USB Device Port"
352	depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9
353	select USB_GADGET_SELECTED
354	help
355	   Many Atmel AT91 processors (such as the AT91RM2000) have a
356	   full speed USB Device Port with support for five configurable
357	   endpoints (plus endpoint zero).
358
359	   Say "y" to link the driver statically, or "m" to build a
360	   dynamically linked module called "at91_udc" and force all
361	   gadget drivers to also be dynamically linked.
362
363config USB_AT91
364	tristate
365	depends on USB_GADGET_AT91
366	default USB_GADGET
367
368config USB_GADGET_DUMMY_HCD
369	boolean "Dummy HCD (DEVELOPMENT)"
370	depends on USB=y || (USB=m && USB_GADGET=m)
371	select USB_GADGET_DUALSPEED
372	help
373	  This host controller driver emulates USB, looping all data transfer
374	  requests back to a USB "gadget driver" in the same host.  The host
375	  side is the master; the gadget side is the slave.  Gadget drivers
376	  can be high, full, or low speed; and they have access to endpoints
377	  like those from NET2280, PXA2xx, or SA1100 hardware.
378
379	  This may help in some stages of creating a driver to embed in a
380	  Linux device, since it lets you debug several parts of the gadget
381	  driver without its hardware or drivers being involved.
382
383	  Since such a gadget side driver needs to interoperate with a host
384	  side Linux-USB device driver, this may help to debug both sides
385	  of a USB protocol stack.
386
387	  Say "y" to link the driver statically, or "m" to build a
388	  dynamically linked module called "dummy_hcd" and force all
389	  gadget drivers to also be dynamically linked.
390
391config USB_DUMMY_HCD
392	tristate
393	depends on USB_GADGET_DUMMY_HCD
394	default USB_GADGET
395	select USB_GADGET_SELECTED
396
397# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
398# first and will be selected by default.
399
400endchoice
401
402config USB_GADGET_DUALSPEED
403	bool
404	depends on USB_GADGET
405	default n
406	help
407	  Means that gadget drivers should include extra descriptors
408	  and code to handle dual-speed controllers.
409
410#
411# USB Gadget Drivers
412#
413choice
414	tristate "USB Gadget Drivers"
415	depends on USB_GADGET && USB_GADGET_SELECTED
416	default USB_ETH
417	help
418	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
419	  driver through the abstract "gadget" API.  Some other operating
420	  systems call these "client" drivers, of which "class drivers"
421	  are a subset (implementing a USB device class specification).
422	  A gadget driver implements one or more USB functions using
423	  the peripheral hardware.
424
425	  Gadget drivers are hardware-neutral, or "platform independent",
426	  except that they sometimes must understand quirks or limitations
427	  of the particular controllers they work with.  For example, when
428	  a controller doesn't support alternate configurations or provide
429	  enough of the right types of endpoints, the gadget driver might
430	  not be able work with that controller, or might need to implement
431	  a less common variant of a device class protocol.
432
433# this first set of drivers all depend on bulk-capable hardware.
434
435config USB_ZERO
436	tristate "Gadget Zero (DEVELOPMENT)"
437	help
438	  Gadget Zero is a two-configuration device.  It either sinks and
439	  sources bulk data; or it loops back a configurable number of
440	  transfers.  It also implements control requests, for "chapter 9"
441	  conformance.  The driver needs only two bulk-capable endpoints, so
442	  it can work on top of most device-side usb controllers.  It's
443	  useful for testing, and is also a working example showing how
444	  USB "gadget drivers" can be written.
445
446	  Make this be the first driver you try using on top of any new
447	  USB peripheral controller driver.  Then you can use host-side
448	  test software, like the "usbtest" driver, to put your hardware
449	  and its driver through a basic set of functional tests.
450
451	  Gadget Zero also works with the host-side "usb-skeleton" driver,
452	  and with many kinds of host-side test software.  You may need
453	  to tweak product and vendor IDs before host software knows about
454	  this device, and arrange to select an appropriate configuration.
455
456	  Say "y" to link the driver statically, or "m" to build a
457	  dynamically linked module called "g_zero".
458
459config USB_ZERO_HNPTEST
460	boolean "HNP Test Device"
461	depends on USB_ZERO && USB_OTG
462	help
463	  You can configure this device to enumerate using the device
464	  identifiers of the USB-OTG test device.  That means that when
465	  this gadget connects to another OTG device, with this one using
466	  the "B-Peripheral" role, that device will use HNP to let this
467	  one serve as the USB host instead (in the "B-Host" role).
468
469config USB_ETH
470	tristate "Ethernet Gadget (with CDC Ethernet support)"
471	depends on NET
472	help
473	  This driver implements Ethernet style communication, in either
474	  of two ways:
475
476	   - The "Communication Device Class" (CDC) Ethernet Control Model.
477	     That protocol is often avoided with pure Ethernet adapters, in
478	     favor of simpler vendor-specific hardware, but is widely
479	     supported by firmware for smart network devices.
480
481	   - On hardware can't implement that protocol, a simple CDC subset
482	     is used, placing fewer demands on USB.
483
484	  RNDIS support is a third option, more demanding than that subset.
485
486	  Within the USB device, this gadget driver exposes a network device
487	  "usbX", where X depends on what other networking devices you have.
488	  Treat it like a two-node Ethernet link:  host, and gadget.
489
490	  The Linux-USB host-side "usbnet" driver interoperates with this
491	  driver, so that deep I/O queues can be supported.  On 2.4 kernels,
492	  use "CDCEther" instead, if you're using the CDC option. That CDC
493	  mode should also interoperate with standard CDC Ethernet class
494	  drivers on other host operating systems.
495
496	  Say "y" to link the driver statically, or "m" to build a
497	  dynamically linked module called "g_ether".
498
499config USB_ETH_RNDIS
500	bool "RNDIS support"
501	depends on USB_ETH
502	default y
503	help
504	   Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
505	   and Microsoft provides redistributable binary RNDIS drivers for
506	   older versions of Windows.
507
508	   If you say "y" here, the Ethernet gadget driver will try to provide
509	   a second device configuration, supporting RNDIS to talk to such
510	   Microsoft USB hosts.
511
512	   To make MS-Windows work with this, use Documentation/usb/linux.inf
513	   as the "driver info file".  For versions of MS-Windows older than
514	   XP, you'll need to download drivers from Microsoft's website; a URL
515	   is given in comments found in that info file.
516
517config USB_GADGETFS
518	tristate "Gadget Filesystem (EXPERIMENTAL)"
519	depends on EXPERIMENTAL
520	help
521	  This driver provides a filesystem based API that lets user mode
522	  programs implement a single-configuration USB device, including
523	  endpoint I/O and control requests that don't relate to enumeration.
524	  All endpoints, transfer speeds, and transfer types supported by
525	  the hardware are available, through read() and write() calls.
526
527	  Currently, this option is still labelled as EXPERIMENTAL because
528	  of existing race conditions in the underlying in-kernel AIO core.
529
530	  Say "y" to link the driver statically, or "m" to build a
531	  dynamically linked module called "gadgetfs".
532
533config USB_FILE_STORAGE
534	tristate "File-backed Storage Gadget"
535	depends on BLOCK
536	help
537	  The File-backed Storage Gadget acts as a USB Mass Storage
538	  disk drive.  As its storage repository it can use a regular
539	  file or a block device (in much the same way as the "loop"
540	  device driver), specified as a module parameter.
541
542	  Say "y" to link the driver statically, or "m" to build a
543	  dynamically linked module called "g_file_storage".
544
545config USB_FILE_STORAGE_TEST
546	bool "File-backed Storage Gadget testing version"
547	depends on USB_FILE_STORAGE
548	default n
549	help
550	  Say "y" to generate the larger testing version of the
551	  File-backed Storage Gadget, useful for probing the
552	  behavior of USB Mass Storage hosts.  Not needed for
553	  normal operation.
554
555config USB_G_SERIAL
556	tristate "Serial Gadget (with CDC ACM support)"
557	help
558	  The Serial Gadget talks to the Linux-USB generic serial driver.
559	  This driver supports a CDC-ACM module option, which can be used
560	  to interoperate with MS-Windows hosts or with the Linux-USB
561	  "cdc-acm" driver.
562
563	  Say "y" to link the driver statically, or "m" to build a
564	  dynamically linked module called "g_serial".
565
566	  For more information, see Documentation/usb/gadget_serial.txt
567	  which includes instructions and a "driver info file" needed to
568	  make MS-Windows work with this driver.
569
570config USB_MIDI_GADGET
571	tristate "MIDI Gadget (EXPERIMENTAL)"
572	depends on SND && EXPERIMENTAL
573	select SND_RAWMIDI
574	help
575	  The MIDI Gadget acts as a USB Audio device, with one MIDI
576	  input and one MIDI output. These MIDI jacks appear as
577	  a sound "card" in the ALSA sound system. Other MIDI
578	  connections can then be made on the gadget system, using
579	  ALSA's aconnect utility etc.
580
581	  Say "y" to link the driver statically, or "m" to build a
582	  dynamically linked module called "g_midi".
583
584config USB_G_PRINTER
585	tristate "Printer Gadget"
586	help
587	  The Printer Gadget channels data between the USB host and a
588	  userspace program driving the print engine. The user space
589	  program reads and writes the device file /dev/g_printer to
590	  receive or send printer data. It can use ioctl calls to
591	  the device file to get or set printer status.
592
593	  Say "y" to link the driver statically, or "m" to build a
594	  dynamically linked module called "g_printer".
595
596	  For more information, see Documentation/usb/gadget_printer.txt
597	  which includes sample code for accessing the device file.
598
599config USB_CDC_COMPOSITE
600	tristate "CDC Composite Device (Ethernet and ACM)"
601	depends on NET
602	help
603	  This driver provides two functions in one configuration:
604	  a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
605
606	  This driver requires four bulk and two interrupt endpoints,
607	  plus the ability to handle altsettings.  Not all peripheral
608	  controllers are that capable.
609
610	  Say "y" to link the driver statically, or "m" to build a
611	  dynamically linked module.
612
613# put drivers that need isochronous transfer support (for audio
614# or video class gadget drivers), or specific hardware, here.
615
616# - none yet
617
618endchoice
619
620endif # USB_GADGET
621