2 # USB Gadget support on a system involves
3 # (a) a peripheral controller, and
4 # (b) the gadget driver using it.
6 # NOTE: Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
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.
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).
17 tristate "USB Gadget Support"
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.
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
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.)
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).
41 For more information, see <http://www.linux-usb.org/gadget> and
42 the kernel DocBook documentation for this API.
46 config USB_GADGET_DEBUG
47 boolean "Debugging messages"
48 depends on USB_GADGET && DEBUG_KERNEL && EXPERIMENTAL
50 Many controller and gadget drivers will print some debugging
51 messages if you use this option to ask for those messages.
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
60 config USB_GADGET_DEBUG_FILES
61 boolean "Debugging information files"
62 depends on USB_GADGET && PROC_FS
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".
71 config USB_GADGET_SELECTED
75 # USB Peripheral Controller Support
78 prompt "USB Peripheral Controller"
81 A USB device uses a controller to talk to its host.
82 Systems should have only one such upstream link.
83 Many controller drivers are platform-specific; these
84 often need board-specific hooks.
86 config USB_GADGET_AMD5536UDC
89 select USB_GADGET_DUALSPEED
91 The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
92 It is a USB Highspeed DMA capable USB device controller. Beside ep0
93 it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
94 The UDC port supports OTG operation, and may be used as a host port
95 if it's not being used to implement peripheral or OTG roles.
97 Say "y" to link the driver statically, or "m" to build a
98 dynamically linked module called "amd5536udc" and force all
99 gadget drivers to also be dynamically linked.
101 config USB_AMD5536UDC
103 depends on USB_GADGET_AMD5536UDC
105 select USB_GADGET_SELECTED
107 config USB_GADGET_FSL_USB2
108 boolean "Freescale Highspeed USB DR Peripheral Controller"
109 depends on MPC834x || PPC_MPC831x
110 select USB_GADGET_DUALSPEED
112 Some of Freescale PowerPC processors have a High Speed
113 Dual-Role(DR) USB controller, which supports device mode.
115 The number of programmable endpoints is different through
118 Say "y" to link the driver statically, or "m" to build a
119 dynamically linked module called "fsl_usb2_udc" and force
120 all gadget drivers to also be dynamically linked.
124 depends on USB_GADGET_FSL_USB2
126 select USB_GADGET_SELECTED
128 config USB_GADGET_NET2280
129 boolean "NetChip 228x"
131 select USB_GADGET_DUALSPEED
133 NetChip 2280 / 2282 is a PCI based USB peripheral controller which
134 supports both full and high speed USB 2.0 data transfers.
136 It has six configurable endpoints, as well as endpoint zero
137 (for control transfers) and several endpoints with dedicated
140 Say "y" to link the driver statically, or "m" to build a
141 dynamically linked module called "net2280" and force all
142 gadget drivers to also be dynamically linked.
146 depends on USB_GADGET_NET2280
148 select USB_GADGET_SELECTED
150 config USB_GADGET_PXA2XX
151 boolean "PXA 25x or IXP 4xx"
152 depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
154 Intel's PXA 25x series XScale ARM-5TE processors include
155 an integrated full speed USB 1.1 device controller. The
156 controller in the IXP 4xx series is register-compatible.
158 It has fifteen fixed-function endpoints, as well as endpoint
159 zero (for control transfers).
161 Say "y" to link the driver statically, or "m" to build a
162 dynamically linked module called "pxa2xx_udc" and force all
163 gadget drivers to also be dynamically linked.
167 depends on USB_GADGET_PXA2XX
169 select USB_GADGET_SELECTED
171 # if there's only one gadget driver, using only two bulk endpoints,
172 # don't waste memory for the other endpoints
173 config USB_PXA2XX_SMALL
174 depends on USB_GADGET_PXA2XX
176 default n if USB_ETH_RNDIS
177 default y if USB_ZERO
179 default y if USB_G_SERIAL
181 config USB_GADGET_M66592
182 boolean "Renesas M66592 USB Peripheral Controller"
183 select USB_GADGET_DUALSPEED
185 M66592 is a discrete USB peripheral controller chip that
186 supports both full and high speed USB 2.0 data transfers.
187 It has seven configurable endpoints, and endpoint zero.
189 Say "y" to link the driver statically, or "m" to build a
190 dynamically linked module called "m66592_udc" and force all
191 gadget drivers to also be dynamically linked.
195 depends on USB_GADGET_M66592
197 select USB_GADGET_SELECTED
199 config USB_GADGET_GOKU
200 boolean "Toshiba TC86C001 'Goku-S'"
203 The Toshiba TC86C001 is a PCI device which includes controllers
204 for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
206 The device controller has three configurable (bulk or interrupt)
207 endpoints, plus endpoint zero (for control transfers).
209 Say "y" to link the driver statically, or "m" to build a
210 dynamically linked module called "goku_udc" and to force all
211 gadget drivers to also be dynamically linked.
215 depends on USB_GADGET_GOKU
217 select USB_GADGET_SELECTED
220 config USB_GADGET_LH7A40X
222 depends on ARCH_LH7A40X
224 This driver provides USB Device Controller driver for LH7A40x
228 depends on USB_GADGET_LH7A40X
230 select USB_GADGET_SELECTED
233 config USB_GADGET_OMAP
234 boolean "OMAP USB Device Controller"
236 select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
238 Many Texas Instruments OMAP processors have flexible full
239 speed USB device controllers, with support for up to 30
240 endpoints (plus endpoint zero). This driver supports the
241 controller in the OMAP 1611, and should work with controllers
242 in other OMAP processors too, given minor tweaks.
244 Say "y" to link the driver statically, or "m" to build a
245 dynamically linked module called "omap_udc" and force all
246 gadget drivers to also be dynamically linked.
250 depends on USB_GADGET_OMAP
252 select USB_GADGET_SELECTED
255 boolean "OTG Support"
256 depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
258 The most notable feature of USB OTG is support for a
259 "Dual-Role" device, which can act as either a device
260 or a host. The initial role choice can be changed
261 later, when two dual-role devices talk to each other.
263 Select this only if your OMAP board has a Mini-AB connector.
265 config USB_GADGET_S3C2410
266 boolean "S3C2410 USB Device Controller"
267 depends on ARCH_S3C2410
269 Samsung's S3C2410 is an ARM-4 processor with an integrated
270 full speed USB 1.1 device controller. It has 4 configurable
271 endpoints, as well as endpoint zero (for control transfers).
273 This driver has been tested on the S3C2410, S3C2412, and
278 depends on USB_GADGET_S3C2410
280 select USB_GADGET_SELECTED
282 config USB_S3C2410_DEBUG
283 boolean "S3C2410 udc debug messages"
284 depends on USB_GADGET_S3C2410
286 config USB_GADGET_AT91
287 boolean "AT91 USB Device Port"
288 depends on ARCH_AT91 && !ARCH_AT91SAM9RL
289 select USB_GADGET_SELECTED
291 Many Atmel AT91 processors (such as the AT91RM2000) have a
292 full speed USB Device Port with support for five configurable
293 endpoints (plus endpoint zero).
295 Say "y" to link the driver statically, or "m" to build a
296 dynamically linked module called "at91_udc" and force all
297 gadget drivers to also be dynamically linked.
301 depends on USB_GADGET_AT91
304 config USB_GADGET_DUMMY_HCD
305 boolean "Dummy HCD (DEVELOPMENT)"
306 depends on (USB=y || (USB=m && USB_GADGET=m)) && EXPERIMENTAL
307 select USB_GADGET_DUALSPEED
309 This host controller driver emulates USB, looping all data transfer
310 requests back to a USB "gadget driver" in the same host. The host
311 side is the master; the gadget side is the slave. Gadget drivers
312 can be high, full, or low speed; and they have access to endpoints
313 like those from NET2280, PXA2xx, or SA1100 hardware.
315 This may help in some stages of creating a driver to embed in a
316 Linux device, since it lets you debug several parts of the gadget
317 driver without its hardware or drivers being involved.
319 Since such a gadget side driver needs to interoperate with a host
320 side Linux-USB device driver, this may help to debug both sides
321 of a USB protocol stack.
323 Say "y" to link the driver statically, or "m" to build a
324 dynamically linked module called "dummy_hcd" and force all
325 gadget drivers to also be dynamically linked.
329 depends on USB_GADGET_DUMMY_HCD
331 select USB_GADGET_SELECTED
333 # NOTE: Please keep dummy_hcd LAST so that "real hardware" appears
334 # first and will be selected by default.
338 config USB_GADGET_DUALSPEED
340 depends on USB_GADGET
343 Means that gadget drivers should include extra descriptors
344 and code to handle dual-speed controllers.
350 tristate "USB Gadget Drivers"
351 depends on USB_GADGET && USB_GADGET_SELECTED
354 A Linux "Gadget Driver" talks to the USB Peripheral Controller
355 driver through the abstract "gadget" API. Some other operating
356 systems call these "client" drivers, of which "class drivers"
357 are a subset (implementing a USB device class specification).
358 A gadget driver implements one or more USB functions using
359 the peripheral hardware.
361 Gadget drivers are hardware-neutral, or "platform independent",
362 except that they sometimes must understand quirks or limitations
363 of the particular controllers they work with. For example, when
364 a controller doesn't support alternate configurations or provide
365 enough of the right types of endpoints, the gadget driver might
366 not be able work with that controller, or might need to implement
367 a less common variant of a device class protocol.
369 # this first set of drivers all depend on bulk-capable hardware.
372 tristate "Gadget Zero (DEVELOPMENT)"
373 depends on EXPERIMENTAL
375 Gadget Zero is a two-configuration device. It either sinks and
376 sources bulk data; or it loops back a configurable number of
377 transfers. It also implements control requests, for "chapter 9"
378 conformance. The driver needs only two bulk-capable endpoints, so
379 it can work on top of most device-side usb controllers. It's
380 useful for testing, and is also a working example showing how
381 USB "gadget drivers" can be written.
383 Make this be the first driver you try using on top of any new
384 USB peripheral controller driver. Then you can use host-side
385 test software, like the "usbtest" driver, to put your hardware
386 and its driver through a basic set of functional tests.
388 Gadget Zero also works with the host-side "usb-skeleton" driver,
389 and with many kinds of host-side test software. You may need
390 to tweak product and vendor IDs before host software knows about
391 this device, and arrange to select an appropriate configuration.
393 Say "y" to link the driver statically, or "m" to build a
394 dynamically linked module called "g_zero".
396 config USB_ZERO_HNPTEST
397 boolean "HNP Test Device"
398 depends on USB_ZERO && USB_OTG
400 You can configure this device to enumerate using the device
401 identifiers of the USB-OTG test device. That means that when
402 this gadget connects to another OTG device, with this one using
403 the "B-Peripheral" role, that device will use HNP to let this
404 one serve as the USB host instead (in the "B-Host" role).
407 tristate "Ethernet Gadget (with CDC Ethernet support)"
410 This driver implements Ethernet style communication, in either
413 - The "Communication Device Class" (CDC) Ethernet Control Model.
414 That protocol is often avoided with pure Ethernet adapters, in
415 favor of simpler vendor-specific hardware, but is widely
416 supported by firmware for smart network devices.
418 - On hardware can't implement that protocol, a simple CDC subset
419 is used, placing fewer demands on USB.
421 RNDIS support is a third option, more demanding than that subset.
423 Within the USB device, this gadget driver exposes a network device
424 "usbX", where X depends on what other networking devices you have.
425 Treat it like a two-node Ethernet link: host, and gadget.
427 The Linux-USB host-side "usbnet" driver interoperates with this
428 driver, so that deep I/O queues can be supported. On 2.4 kernels,
429 use "CDCEther" instead, if you're using the CDC option. That CDC
430 mode should also interoperate with standard CDC Ethernet class
431 drivers on other host operating systems.
433 Say "y" to link the driver statically, or "m" to build a
434 dynamically linked module called "g_ether".
437 bool "RNDIS support (EXPERIMENTAL)"
438 depends on USB_ETH && EXPERIMENTAL
441 Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
442 and Microsoft provides redistributable binary RNDIS drivers for
443 older versions of Windows.
445 If you say "y" here, the Ethernet gadget driver will try to provide
446 a second device configuration, supporting RNDIS to talk to such
449 To make MS-Windows work with this, use Documentation/usb/linux.inf
450 as the "driver info file". For versions of MS-Windows older than
451 XP, you'll need to download drivers from Microsoft's website; a URL
452 is given in comments found in that info file.
455 tristate "Gadget Filesystem (EXPERIMENTAL)"
456 depends on EXPERIMENTAL
458 This driver provides a filesystem based API that lets user mode
459 programs implement a single-configuration USB device, including
460 endpoint I/O and control requests that don't relate to enumeration.
461 All endpoints, transfer speeds, and transfer types supported by
462 the hardware are available, through read() and write() calls.
464 Say "y" to link the driver statically, or "m" to build a
465 dynamically linked module called "gadgetfs".
467 config USB_FILE_STORAGE
468 tristate "File-backed Storage Gadget"
471 The File-backed Storage Gadget acts as a USB Mass Storage
472 disk drive. As its storage repository it can use a regular
473 file or a block device (in much the same way as the "loop"
474 device driver), specified as a module parameter.
476 Say "y" to link the driver statically, or "m" to build a
477 dynamically linked module called "g_file_storage".
479 config USB_FILE_STORAGE_TEST
480 bool "File-backed Storage Gadget testing version"
481 depends on USB_FILE_STORAGE
484 Say "y" to generate the larger testing version of the
485 File-backed Storage Gadget, useful for probing the
486 behavior of USB Mass Storage hosts. Not needed for
490 tristate "Serial Gadget (with CDC ACM support)"
492 The Serial Gadget talks to the Linux-USB generic serial driver.
493 This driver supports a CDC-ACM module option, which can be used
494 to interoperate with MS-Windows hosts or with the Linux-USB
497 Say "y" to link the driver statically, or "m" to build a
498 dynamically linked module called "g_serial".
500 For more information, see Documentation/usb/gadget_serial.txt
501 which includes instructions and a "driver info file" needed to
502 make MS-Windows work with this driver.
504 config USB_MIDI_GADGET
505 tristate "MIDI Gadget (EXPERIMENTAL)"
506 depends on SND && EXPERIMENTAL
509 The MIDI Gadget acts as a USB Audio device, with one MIDI
510 input and one MIDI output. These MIDI jacks appear as
511 a sound "card" in the ALSA sound system. Other MIDI
512 connections can then be made on the gadget system, using
513 ALSA's aconnect utility etc.
515 Say "y" to link the driver statically, or "m" to build a
516 dynamically linked module called "g_midi".
519 # put drivers that need isochronous transfer support (for audio
520 # or video class gadget drivers), or specific hardware, here.