xref: /linux/drivers/usb/gadget/Kconfig (revision 19e2068015d4a66f62a0a19be2130d2948ba8024)
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
287config USB_GADGET_OMAP
288	boolean "OMAP USB Device Controller"
289	depends on ARCH_OMAP
290	select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
291	help
292	   Many Texas Instruments OMAP processors have flexible full
293	   speed USB device controllers, with support for up to 30
294	   endpoints (plus endpoint zero).  This driver supports the
295	   controller in the OMAP 1611, and should work with controllers
296	   in other OMAP processors too, given minor tweaks.
297
298	   Say "y" to link the driver statically, or "m" to build a
299	   dynamically linked module called "omap_udc" and force all
300	   gadget drivers to also be dynamically linked.
301
302config USB_OMAP
303	tristate
304	depends on USB_GADGET_OMAP
305	default USB_GADGET
306	select USB_GADGET_SELECTED
307
308config USB_OTG
309	boolean "OTG Support"
310	depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
311	help
312	   The most notable feature of USB OTG is support for a
313	   "Dual-Role" device, which can act as either a device
314	   or a host.  The initial role choice can be changed
315	   later, when two dual-role devices talk to each other.
316
317	   Select this only if your OMAP board has a Mini-AB connector.
318
319config USB_GADGET_S3C2410
320	boolean "S3C2410 USB Device Controller"
321	depends on ARCH_S3C2410
322	help
323	  Samsung's S3C2410 is an ARM-4 processor with an integrated
324	  full speed USB 1.1 device controller.  It has 4 configurable
325	  endpoints, as well as endpoint zero (for control transfers).
326
327	  This driver has been tested on the S3C2410, S3C2412, and
328	  S3C2440 processors.
329
330config USB_S3C2410
331	tristate
332	depends on USB_GADGET_S3C2410
333	default USB_GADGET
334	select USB_GADGET_SELECTED
335
336config USB_S3C2410_DEBUG
337	boolean "S3C2410 udc debug messages"
338	depends on USB_GADGET_S3C2410
339
340config USB_GADGET_AT91
341	boolean "AT91 USB Device Port"
342	depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9
343	select USB_GADGET_SELECTED
344	help
345	   Many Atmel AT91 processors (such as the AT91RM2000) have a
346	   full speed USB Device Port with support for five configurable
347	   endpoints (plus endpoint zero).
348
349	   Say "y" to link the driver statically, or "m" to build a
350	   dynamically linked module called "at91_udc" and force all
351	   gadget drivers to also be dynamically linked.
352
353config USB_AT91
354	tristate
355	depends on USB_GADGET_AT91
356	default USB_GADGET
357
358config USB_GADGET_DUMMY_HCD
359	boolean "Dummy HCD (DEVELOPMENT)"
360	depends on USB=y || (USB=m && USB_GADGET=m)
361	select USB_GADGET_DUALSPEED
362	help
363	  This host controller driver emulates USB, looping all data transfer
364	  requests back to a USB "gadget driver" in the same host.  The host
365	  side is the master; the gadget side is the slave.  Gadget drivers
366	  can be high, full, or low speed; and they have access to endpoints
367	  like those from NET2280, PXA2xx, or SA1100 hardware.
368
369	  This may help in some stages of creating a driver to embed in a
370	  Linux device, since it lets you debug several parts of the gadget
371	  driver without its hardware or drivers being involved.
372
373	  Since such a gadget side driver needs to interoperate with a host
374	  side Linux-USB device driver, this may help to debug both sides
375	  of a USB protocol stack.
376
377	  Say "y" to link the driver statically, or "m" to build a
378	  dynamically linked module called "dummy_hcd" and force all
379	  gadget drivers to also be dynamically linked.
380
381config USB_DUMMY_HCD
382	tristate
383	depends on USB_GADGET_DUMMY_HCD
384	default USB_GADGET
385	select USB_GADGET_SELECTED
386
387# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
388# first and will be selected by default.
389
390endchoice
391
392config USB_GADGET_DUALSPEED
393	bool
394	depends on USB_GADGET
395	default n
396	help
397	  Means that gadget drivers should include extra descriptors
398	  and code to handle dual-speed controllers.
399
400#
401# USB Gadget Drivers
402#
403choice
404	tristate "USB Gadget Drivers"
405	depends on USB_GADGET && USB_GADGET_SELECTED
406	default USB_ETH
407	help
408	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
409	  driver through the abstract "gadget" API.  Some other operating
410	  systems call these "client" drivers, of which "class drivers"
411	  are a subset (implementing a USB device class specification).
412	  A gadget driver implements one or more USB functions using
413	  the peripheral hardware.
414
415	  Gadget drivers are hardware-neutral, or "platform independent",
416	  except that they sometimes must understand quirks or limitations
417	  of the particular controllers they work with.  For example, when
418	  a controller doesn't support alternate configurations or provide
419	  enough of the right types of endpoints, the gadget driver might
420	  not be able work with that controller, or might need to implement
421	  a less common variant of a device class protocol.
422
423# this first set of drivers all depend on bulk-capable hardware.
424
425config USB_ZERO
426	tristate "Gadget Zero (DEVELOPMENT)"
427	help
428	  Gadget Zero is a two-configuration device.  It either sinks and
429	  sources bulk data; or it loops back a configurable number of
430	  transfers.  It also implements control requests, for "chapter 9"
431	  conformance.  The driver needs only two bulk-capable endpoints, so
432	  it can work on top of most device-side usb controllers.  It's
433	  useful for testing, and is also a working example showing how
434	  USB "gadget drivers" can be written.
435
436	  Make this be the first driver you try using on top of any new
437	  USB peripheral controller driver.  Then you can use host-side
438	  test software, like the "usbtest" driver, to put your hardware
439	  and its driver through a basic set of functional tests.
440
441	  Gadget Zero also works with the host-side "usb-skeleton" driver,
442	  and with many kinds of host-side test software.  You may need
443	  to tweak product and vendor IDs before host software knows about
444	  this device, and arrange to select an appropriate configuration.
445
446	  Say "y" to link the driver statically, or "m" to build a
447	  dynamically linked module called "g_zero".
448
449config USB_ZERO_HNPTEST
450	boolean "HNP Test Device"
451	depends on USB_ZERO && USB_OTG
452	help
453	  You can configure this device to enumerate using the device
454	  identifiers of the USB-OTG test device.  That means that when
455	  this gadget connects to another OTG device, with this one using
456	  the "B-Peripheral" role, that device will use HNP to let this
457	  one serve as the USB host instead (in the "B-Host" role).
458
459config USB_ETH
460	tristate "Ethernet Gadget (with CDC Ethernet support)"
461	depends on NET
462	help
463	  This driver implements Ethernet style communication, in either
464	  of two ways:
465
466	   - The "Communication Device Class" (CDC) Ethernet Control Model.
467	     That protocol is often avoided with pure Ethernet adapters, in
468	     favor of simpler vendor-specific hardware, but is widely
469	     supported by firmware for smart network devices.
470
471	   - On hardware can't implement that protocol, a simple CDC subset
472	     is used, placing fewer demands on USB.
473
474	  RNDIS support is a third option, more demanding than that subset.
475
476	  Within the USB device, this gadget driver exposes a network device
477	  "usbX", where X depends on what other networking devices you have.
478	  Treat it like a two-node Ethernet link:  host, and gadget.
479
480	  The Linux-USB host-side "usbnet" driver interoperates with this
481	  driver, so that deep I/O queues can be supported.  On 2.4 kernels,
482	  use "CDCEther" instead, if you're using the CDC option. That CDC
483	  mode should also interoperate with standard CDC Ethernet class
484	  drivers on other host operating systems.
485
486	  Say "y" to link the driver statically, or "m" to build a
487	  dynamically linked module called "g_ether".
488
489config USB_ETH_RNDIS
490	bool "RNDIS support"
491	depends on USB_ETH
492	default y
493	help
494	   Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
495	   and Microsoft provides redistributable binary RNDIS drivers for
496	   older versions of Windows.
497
498	   If you say "y" here, the Ethernet gadget driver will try to provide
499	   a second device configuration, supporting RNDIS to talk to such
500	   Microsoft USB hosts.
501
502	   To make MS-Windows work with this, use Documentation/usb/linux.inf
503	   as the "driver info file".  For versions of MS-Windows older than
504	   XP, you'll need to download drivers from Microsoft's website; a URL
505	   is given in comments found in that info file.
506
507config USB_GADGETFS
508	tristate "Gadget Filesystem (EXPERIMENTAL)"
509	depends on EXPERIMENTAL
510	help
511	  This driver provides a filesystem based API that lets user mode
512	  programs implement a single-configuration USB device, including
513	  endpoint I/O and control requests that don't relate to enumeration.
514	  All endpoints, transfer speeds, and transfer types supported by
515	  the hardware are available, through read() and write() calls.
516
517	  Currently, this option is still labelled as EXPERIMENTAL because
518	  of existing race conditions in the underlying in-kernel AIO core.
519
520	  Say "y" to link the driver statically, or "m" to build a
521	  dynamically linked module called "gadgetfs".
522
523config USB_FILE_STORAGE
524	tristate "File-backed Storage Gadget"
525	depends on BLOCK
526	help
527	  The File-backed Storage Gadget acts as a USB Mass Storage
528	  disk drive.  As its storage repository it can use a regular
529	  file or a block device (in much the same way as the "loop"
530	  device driver), specified as a module parameter.
531
532	  Say "y" to link the driver statically, or "m" to build a
533	  dynamically linked module called "g_file_storage".
534
535config USB_FILE_STORAGE_TEST
536	bool "File-backed Storage Gadget testing version"
537	depends on USB_FILE_STORAGE
538	default n
539	help
540	  Say "y" to generate the larger testing version of the
541	  File-backed Storage Gadget, useful for probing the
542	  behavior of USB Mass Storage hosts.  Not needed for
543	  normal operation.
544
545config USB_G_SERIAL
546	tristate "Serial Gadget (with CDC ACM support)"
547	help
548	  The Serial Gadget talks to the Linux-USB generic serial driver.
549	  This driver supports a CDC-ACM module option, which can be used
550	  to interoperate with MS-Windows hosts or with the Linux-USB
551	  "cdc-acm" driver.
552
553	  Say "y" to link the driver statically, or "m" to build a
554	  dynamically linked module called "g_serial".
555
556	  For more information, see Documentation/usb/gadget_serial.txt
557	  which includes instructions and a "driver info file" needed to
558	  make MS-Windows work with this driver.
559
560config USB_MIDI_GADGET
561	tristate "MIDI Gadget (EXPERIMENTAL)"
562	depends on SND && EXPERIMENTAL
563	select SND_RAWMIDI
564	help
565	  The MIDI Gadget acts as a USB Audio device, with one MIDI
566	  input and one MIDI output. These MIDI jacks appear as
567	  a sound "card" in the ALSA sound system. Other MIDI
568	  connections can then be made on the gadget system, using
569	  ALSA's aconnect utility etc.
570
571	  Say "y" to link the driver statically, or "m" to build a
572	  dynamically linked module called "g_midi".
573
574config USB_G_PRINTER
575	tristate "Printer Gadget"
576	help
577	  The Printer Gadget channels data between the USB host and a
578	  userspace program driving the print engine. The user space
579	  program reads and writes the device file /dev/g_printer to
580	  receive or send printer data. It can use ioctl calls to
581	  the device file to get or set printer status.
582
583	  Say "y" to link the driver statically, or "m" to build a
584	  dynamically linked module called "g_printer".
585
586	  For more information, see Documentation/usb/gadget_printer.txt
587	  which includes sample code for accessing the device file.
588
589config USB_CDC_COMPOSITE
590	tristate "CDC Composite Device (Ethernet and ACM)"
591	help
592	  This driver provides two functions in one configuration:
593	  a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
594
595	  This driver requires four bulk and two interrupt endpoints,
596	  plus the ability to handle altsettings.  Not all peripheral
597	  controllers are that capable.
598
599	  Say "y" to link the driver statically, or "m" to build a
600	  dynamically linked module.
601
602# put drivers that need isochronous transfer support (for audio
603# or video class gadget drivers), or specific hardware, here.
604
605# - none yet
606
607endchoice
608
609endif # USB_GADGET
610