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