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