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).
  16config USB_ZERO
  17        tristate "Gadget Zero (DEVELOPMENT)"
  18        select USB_LIBCOMPOSITE
  19        select USB_F_SS_LB
  20        help
  21          Gadget Zero is a two-configuration device.  It either sinks and
  22          sources bulk data; or it loops back a configurable number of
  23          transfers.  It also implements control requests, for "chapter 9"
  24          conformance.  The driver needs only two bulk-capable endpoints, so
  25          it can work on top of most device-side usb controllers.  It's
  26          useful for testing, and is also a working example showing how
  27          USB "gadget drivers" can be written.
  29          Make this be the first driver you try using on top of any new
  30          USB peripheral controller driver.  Then you can use host-side
  31          test software, like the "usbtest" driver, to put your hardware
  32          and its driver through a basic set of functional tests.
  34          Gadget Zero also works with the host-side "usb-skeleton" driver,
  35          and with many kinds of host-side test software.  You may need
  36          to tweak product and vendor IDs before host software knows about
  37          this device, and arrange to select an appropriate configuration.
  39          Say "y" to link the driver statically, or "m" to build a
  40          dynamically linked module called "g_zero".
  43        boolean "HNP Test Device"
  44        depends on USB_ZERO && USB_OTG
  45        help
  46          You can configure this device to enumerate using the device
  47          identifiers of the USB-OTG test device.  That means that when
  48          this gadget connects to another OTG device, with this one using
  49          the "B-Peripheral" role, that device will use HNP to let this
  50          one serve as the USB host instead (in the "B-Host" role).
  52config USB_AUDIO
  53        tristate "Audio Gadget"
  54        depends on SND
  55        select USB_LIBCOMPOSITE
  56        select SND_PCM
  57        select USB_F_UAC1 if GADGET_UAC1
  58        select USB_F_UAC2 if !GADGET_UAC1
  59        help
  60          This Gadget Audio driver is compatible with USB Audio Class
  61          specification 2.0. It implements 1 AudioControl interface,
  62          1 AudioStreaming Interface each for USB-OUT and USB-IN.
  63          Number of channels, sample rate and sample size can be
  64          specified as module parameters.
  65          This driver doesn't expect any real Audio codec to be present
  66          on the device - the audio streams are simply sinked to and
  67          sourced from a virtual ALSA sound card created. The user-space
  68          application may choose to do whatever it wants with the data
  69          received from the USB Host and choose to provide whatever it
  70          wants as audio data to the USB Host.
  72          Say "y" to link the driver statically, or "m" to build a
  73          dynamically linked module called "g_audio".
  75config GADGET_UAC1
  76        bool "UAC 1.0 (Legacy)"
  77        depends on USB_AUDIO
  78        help
  79          If you instead want older UAC Spec-1.0 driver that also has audio
  80          paths hardwired to the Audio codec chip on-board and doesn't work
  81          without one.
  83config USB_ETH
  84        tristate "Ethernet Gadget (with CDC Ethernet support)"
  85        depends on NET
  86        select USB_LIBCOMPOSITE
  87        select USB_U_ETHER
  88        select USB_F_ECM
  89        select USB_F_SUBSET
  90        select CRC32
  91        help
  92          This driver implements Ethernet style communication, in one of
  93          several ways:
  95           - The "Communication Device Class" (CDC) Ethernet Control Model.
  96             That protocol is often avoided with pure Ethernet adapters, in
  97             favor of simpler vendor-specific hardware, but is widely
  98             supported by firmware for smart network devices.
 100           - On hardware can't implement that protocol, a simple CDC subset
 101             is used, placing fewer demands on USB.
 103           - CDC Ethernet Emulation Model (EEM) is a newer standard that has
 104             a simpler interface that can be used by more USB hardware.
 106          RNDIS support is an additional option, more demanding than than
 107          subset.
 109          Within the USB device, this gadget driver exposes a network device
 110          "usbX", where X depends on what other networking devices you have.
 111          Treat it like a two-node Ethernet link:  host, and gadget.
 113          The Linux-USB host-side "usbnet" driver interoperates with this
 114          driver, so that deep I/O queues can be supported.  On 2.4 kernels,
 115          use "CDCEther" instead, if you're using the CDC option. That CDC
 116          mode should also interoperate with standard CDC Ethernet class
 117          drivers on other host operating systems.
 119          Say "y" to link the driver statically, or "m" to build a
 120          dynamically linked module called "g_ether".
 122config USB_ETH_RNDIS
 123        bool "RNDIS support"
 124        depends on USB_ETH
 125        select USB_LIBCOMPOSITE
 126        select USB_F_RNDIS
 127        default y
 128        help
 129           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
 130           and Microsoft provides redistributable binary RNDIS drivers for
 131           older versions of Windows.
 133           If you say "y" here, the Ethernet gadget driver will try to provide
 134           a second device configuration, supporting RNDIS to talk to such
 135           Microsoft USB hosts.
 137           To make MS-Windows work with this, use Documentation/usb/linux.inf
 138           as the "driver info file".  For versions of MS-Windows older than
 139           XP, you'll need to download drivers from Microsoft's website; a URL
 140           is given in comments found in that info file.
 142config USB_ETH_EEM
 143       bool "Ethernet Emulation Model (EEM) support"
 144       depends on USB_ETH
 145        select USB_LIBCOMPOSITE
 146        select USB_F_EEM
 147       default n
 148       help
 149         CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
 150         and therefore can be supported by more hardware.  Technically ECM and
 151         EEM are designed for different applications.  The ECM model extends
 152         the network interface to the target (e.g. a USB cable modem), and the
 153         EEM model is for mobile devices to communicate with hosts using
 154         ethernet over USB.  For Linux gadgets, however, the interface with
 155         the host is the same (a usbX device), so the differences are minimal.
 157         If you say "y" here, the Ethernet gadget driver will use the EEM
 158         protocol rather than ECM.  If unsure, say "n".
 160config USB_G_NCM
 161        tristate "Network Control Model (NCM) support"
 162        depends on NET
 163        select USB_LIBCOMPOSITE
 164        select USB_U_ETHER
 165        select USB_F_NCM
 166        select CRC32
 167        help
 168          This driver implements USB CDC NCM subclass standard. NCM is
 169          an advanced protocol for Ethernet encapsulation, allows grouping
 170          of several ethernet frames into one USB transfer and different
 171          alignment possibilities.
 173          Say "y" to link the driver statically, or "m" to build a
 174          dynamically linked module called "g_ncm".
 176config USB_GADGETFS
 177        tristate "Gadget Filesystem"
 178        help
 179          This driver provides a filesystem based API that lets user mode
 180          programs implement a single-configuration USB device, including
 181          endpoint I/O and control requests that don't relate to enumeration.
 182          All endpoints, transfer speeds, and transfer types supported by
 183          the hardware are available, through read() and write() calls.
 185          Say "y" to link the driver statically, or "m" to build a
 186          dynamically linked module called "gadgetfs".
 189        tristate "Function Filesystem"
 190        select USB_LIBCOMPOSITE
 191        select USB_F_FS
 193        help
 194          The Function Filesystem (FunctionFS) lets one create USB
 195          composite functions in user space in the same way GadgetFS
 196          lets one create USB gadgets in user space.  This allows creation
 197          of composite gadgets such that some of the functions are
 198          implemented in kernel space (for instance Ethernet, serial or
 199          mass storage) and other are implemented in user space.
 201          If you say "y" or "m" here you will be able what kind of
 202          configurations the gadget will provide.
 204          Say "y" to link the driver statically, or "m" to build
 205          a dynamically linked module called "g_ffs".
 208        bool "Include configuration with CDC ECM (Ethernet)"
 209        depends on USB_FUNCTIONFS && NET
 210        select USB_U_ETHER
 211        select USB_F_ECM
 212        select USB_F_SUBSET
 213        help
 214          Include a configuration with CDC ECM function (Ethernet) and the
 215          Function Filesystem.
 218        bool "Include configuration with RNDIS (Ethernet)"
 219        depends on USB_FUNCTIONFS && NET
 220        select USB_U_ETHER
 221        select USB_F_RNDIS
 222        help
 223          Include a configuration with RNDIS function (Ethernet) and the Filesystem.
 226        bool "Include 'pure' configuration"
 227        depends on USB_FUNCTIONFS
 228        help
 229          Include a configuration with the Function Filesystem alone with
 230          no Ethernet interface.
 233        tristate "Mass Storage Gadget"
 234        depends on BLOCK
 235        select USB_LIBCOMPOSITE
 236        select USB_F_MASS_STORAGE
 237        help
 238          The Mass Storage Gadget acts as a USB Mass Storage disk drive.
 239          As its storage repository it can use a regular file or a block
 240          device (in much the same way as the "loop" device driver),
 241          specified as a module parameter or sysfs option.
 243          This driver is a replacement for now removed File-backed
 244          Storage Gadget (g_file_storage).
 246          Say "y" to link the driver statically, or "m" to build
 247          a dynamically linked module called "g_mass_storage".
 250        tristate "USB Gadget Target Fabric Module"
 251        depends on TARGET_CORE
 252        select USB_LIBCOMPOSITE
 253        help
 254          This fabric is an USB gadget. Two USB protocols are supported that is
 255          BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is
 256          advertised on alternative interface 0 (primary) and UAS is on
 257          alternative interface 1. Both protocols can work on USB2.0 and USB3.0.
 258          UAS utilizes the USB 3.0 feature called streams support.
 260config USB_G_SERIAL
 261        tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
 262        depends on TTY
 263        select USB_U_SERIAL
 264        select USB_F_ACM
 265        select USB_F_SERIAL
 266        select USB_F_OBEX
 267        select USB_LIBCOMPOSITE
 268        help
 269          The Serial Gadget talks to the Linux-USB generic serial driver.
 270          This driver supports a CDC-ACM module option, which can be used
 271          to interoperate with MS-Windows hosts or with the Linux-USB
 272          "cdc-acm" driver.
 274          This driver also supports a CDC-OBEX option.  You will need a
 275          user space OBEX server talking to /dev/ttyGS*, since the kernel
 276          itself doesn't implement the OBEX protocol.
 278          Say "y" to link the driver statically, or "m" to build a
 279          dynamically linked module called "g_serial".
 281          For more information, see Documentation/usb/gadget_serial.txt
 282          which includes instructions and a "driver info file" needed to
 283          make MS-Windows work with CDC ACM.
 285config USB_MIDI_GADGET
 286        tristate "MIDI Gadget"
 287        depends on SND
 288        select USB_LIBCOMPOSITE
 289        select SND_RAWMIDI
 290        select USB_F_MIDI
 291        help
 292          The MIDI Gadget acts as a USB Audio device, with one MIDI
 293          input and one MIDI output. These MIDI jacks appear as
 294          a sound "card" in the ALSA sound system. Other MIDI
 295          connections can then be made on the gadget system, using
 296          ALSA's aconnect utility etc.
 298          Say "y" to link the driver statically, or "m" to build a
 299          dynamically linked module called "g_midi".
 301config USB_G_PRINTER
 302        tristate "Printer Gadget"
 303        select USB_LIBCOMPOSITE
 304        help
 305          The Printer Gadget channels data between the USB host and a
 306          userspace program driving the print engine. The user space
 307          program reads and writes the device file /dev/g_printer to
 308          receive or send printer data. It can use ioctl calls to
 309          the device file to get or set printer status.
 311          Say "y" to link the driver statically, or "m" to build a
 312          dynamically linked module called "g_printer".
 314          For more information, see Documentation/usb/gadget_printer.txt
 315          which includes sample code for accessing the device file.
 317if TTY
 320        tristate "CDC Composite Device (Ethernet and ACM)"
 321        depends on NET
 322        select USB_LIBCOMPOSITE
 323        select USB_U_SERIAL
 324        select USB_U_ETHER
 325        select USB_F_ACM
 326        select USB_F_ECM
 327        help
 328          This driver provides two functions in one configuration:
 329          a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
 331          This driver requires four bulk and two interrupt endpoints,
 332          plus the ability to handle altsettings.  Not all peripheral
 333          controllers are that capable.
 335          Say "y" to link the driver statically, or "m" to build a
 336          dynamically linked module.
 338config USB_G_NOKIA
 339        tristate "Nokia composite gadget"
 340        depends on PHONET
 341        select USB_LIBCOMPOSITE
 342        select USB_U_SERIAL
 343        select USB_U_ETHER
 344        select USB_F_ACM
 345        select USB_F_OBEX
 346        select USB_F_PHONET
 347        select USB_F_ECM
 348        help
 349          The Nokia composite gadget provides support for acm, obex
 350          and phonet in only one composite gadget driver.
 352          It's only really useful for N900 hardware. If you're building
 353          a kernel for N900, say Y or M here. If unsure, say N.
 355config USB_G_ACM_MS
 356        tristate "CDC Composite Device (ACM and mass storage)"
 357        depends on BLOCK
 358        select USB_LIBCOMPOSITE
 359        select USB_U_SERIAL
 360        select USB_F_ACM
 361        select USB_F_MASS_STORAGE
 362        help
 363          This driver provides two functions in one configuration:
 364          a mass storage, and a CDC ACM (serial port) link.
 366          Say "y" to link the driver statically, or "m" to build a
 367          dynamically linked module called "g_acm_ms".
 369config USB_G_MULTI
 370        tristate "Multifunction Composite Gadget"
 371        depends on BLOCK && NET
 372        select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
 373        select USB_LIBCOMPOSITE
 374        select USB_U_SERIAL
 375        select USB_U_ETHER
 376        select USB_F_ACM
 377        select USB_F_MASS_STORAGE
 378        help
 379          The Multifunction Composite Gadget provides Ethernet (RNDIS
 380          and/or CDC Ethernet), mass storage and ACM serial link
 381          interfaces.
 383          You will be asked to choose which of the two configurations is
 384          to be available in the gadget.  At least one configuration must
 385          be chosen to make the gadget usable.  Selecting more than one
 386          configuration will prevent Windows from automatically detecting
 387          the gadget as a composite gadget, so an INF file will be needed to
 388          use the gadget.
 390          Say "y" to link the driver statically, or "m" to build a
 391          dynamically linked module called "g_multi".
 393config USB_G_MULTI_RNDIS
 394        bool "RNDIS + CDC Serial + Storage configuration"
 395        depends on USB_G_MULTI
 396        select USB_F_RNDIS
 397        default y
 398        help
 399          This option enables a configuration with RNDIS, CDC Serial and
 400          Mass Storage functions available in the Multifunction Composite
 401          Gadget.  This is the configuration dedicated for Windows since RNDIS
 402          is Microsoft's protocol.
 404          If unsure, say "y".
 406config USB_G_MULTI_CDC
 407        bool "CDC Ethernet + CDC Serial + Storage configuration"
 408        depends on USB_G_MULTI
 409        default n
 410        select USB_F_ECM
 411        help
 412          This option enables a configuration with CDC Ethernet (ECM), CDC
 413          Serial and Mass Storage functions available in the Multifunction
 414          Composite Gadget.
 416          If unsure, say "y".
 418endif # TTY
 420config USB_G_HID
 421        tristate "HID Gadget"
 422        select USB_LIBCOMPOSITE
 423        select USB_F_HID
 424        help
 425          The HID gadget driver provides generic emulation of USB
 426          Human Interface Devices (HID).
 428          For more information, see Documentation/usb/gadget_hid.txt which
 429          includes sample code for accessing the device files.
 431          Say "y" to link the driver statically, or "m" to build a
 432          dynamically linked module called "g_hid".
 434# Standalone / single function gadgets
 435config USB_G_DBGP
 436        tristate "EHCI Debug Device Gadget"
 437        depends on TTY
 438        select USB_LIBCOMPOSITE
 439        help
 440          This gadget emulates an EHCI Debug device. This is useful when you want
 441          to interact with an EHCI Debug Port.
 443          Say "y" to link the driver statically, or "m" to build a
 444          dynamically linked module called "g_dbgp".
 446if USB_G_DBGP
 448        prompt "EHCI Debug Device mode"
 449        default USB_G_DBGP_SERIAL
 451config USB_G_DBGP_PRINTK
 452        depends on USB_G_DBGP
 453        bool "printk"
 454        help
 455          Directly printk() received data. No interaction.
 457config USB_G_DBGP_SERIAL
 458        depends on USB_G_DBGP
 459        select USB_U_SERIAL
 460        bool "serial"
 461        help
 462          Userland can interact using /dev/ttyGSxxx.
 466# put drivers that need isochronous transfer support (for audio
 467# or video class gadget drivers), or specific hardware, here.
 468config USB_G_WEBCAM
 469        tristate "USB Webcam Gadget"
 470        depends on VIDEO_DEV
 471        select USB_LIBCOMPOSITE
 472        select VIDEOBUF2_VMALLOC
 473        select USB_F_UVC
 474        help
 475          The Webcam Gadget acts as a composite USB Audio and Video Class
 476          device. It provides a userspace API to process UVC control requests
 477          and stream video data to the host.
 479          Say "y" to link the driver statically, or "m" to build a
 480          dynamically linked module called "g_webcam".
 481 kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.