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        bool "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 subset.
 108          Within the USB device, this gadget driver exposes a network device
 109          "usbX", where X depends on what other networking devices you have.
 110          Treat it like a two-node Ethernet link:  host, and gadget.
 112          The Linux-USB host-side "usbnet" driver interoperates with this
 113          driver, so that deep I/O queues can be supported.  On 2.4 kernels,
 114          use "CDCEther" instead, if you're using the CDC option. That CDC
 115          mode should also interoperate with standard CDC Ethernet class
 116          drivers on other host operating systems.
 118          Say "y" to link the driver statically, or "m" to build a
 119          dynamically linked module called "g_ether".
 121config USB_ETH_RNDIS
 122        bool "RNDIS support"
 123        depends on USB_ETH
 124        select USB_LIBCOMPOSITE
 125        select USB_F_RNDIS
 126        default y
 127        help
 128           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
 129           and Microsoft provides redistributable binary RNDIS drivers for
 130           older versions of Windows.
 132           If you say "y" here, the Ethernet gadget driver will try to provide
 133           a second device configuration, supporting RNDIS to talk to such
 134           Microsoft USB hosts.
 136           To make MS-Windows work with this, use Documentation/usb/linux.inf
 137           as the "driver info file".  For versions of MS-Windows older than
 138           XP, you'll need to download drivers from Microsoft's website; a URL
 139           is given in comments found in that info file.
 141config USB_ETH_EEM
 142       bool "Ethernet Emulation Model (EEM) support"
 143       depends on USB_ETH
 144        select USB_LIBCOMPOSITE
 145        select USB_F_EEM
 146       default n
 147       help
 148         CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
 149         and therefore can be supported by more hardware.  Technically ECM and
 150         EEM are designed for different applications.  The ECM model extends
 151         the network interface to the target (e.g. a USB cable modem), and the
 152         EEM model is for mobile devices to communicate with hosts using
 153         ethernet over USB.  For Linux gadgets, however, the interface with
 154         the host is the same (a usbX device), so the differences are minimal.
 156         If you say "y" here, the Ethernet gadget driver will use the EEM
 157         protocol rather than ECM.  If unsure, say "n".
 159config USB_G_NCM
 160        tristate "Network Control Model (NCM) support"
 161        depends on NET
 162        select USB_LIBCOMPOSITE
 163        select USB_U_ETHER
 164        select USB_F_NCM
 165        select CRC32
 166        help
 167          This driver implements USB CDC NCM subclass standard. NCM is
 168          an advanced protocol for Ethernet encapsulation, allows grouping
 169          of several ethernet frames into one USB transfer and different
 170          alignment possibilities.
 172          Say "y" to link the driver statically, or "m" to build a
 173          dynamically linked module called "g_ncm".
 175config USB_GADGETFS
 176        tristate "Gadget Filesystem"
 177        help
 178          This driver provides a filesystem based API that lets user mode
 179          programs implement a single-configuration USB device, including
 180          endpoint I/O and control requests that don't relate to enumeration.
 181          All endpoints, transfer speeds, and transfer types supported by
 182          the hardware are available, through read() and write() calls.
 184          Say "y" to link the driver statically, or "m" to build a
 185          dynamically linked module called "gadgetfs".
 188        tristate "Function Filesystem"
 189        select USB_LIBCOMPOSITE
 190        select USB_F_FS
 192        help
 193          The Function Filesystem (FunctionFS) lets one create USB
 194          composite functions in user space in the same way GadgetFS
 195          lets one create USB gadgets in user space.  This allows creation
 196          of composite gadgets such that some of the functions are
 197          implemented in kernel space (for instance Ethernet, serial or
 198          mass storage) and other are implemented in user space.
 200          If you say "y" or "m" here you will be able what kind of
 201          configurations the gadget will provide.
 203          Say "y" to link the driver statically, or "m" to build
 204          a dynamically linked module called "g_ffs".
 207        bool "Include configuration with CDC ECM (Ethernet)"
 208        depends on USB_FUNCTIONFS && NET
 209        select USB_U_ETHER
 210        select USB_F_ECM
 211        select USB_F_SUBSET
 212        help
 213          Include a configuration with CDC ECM function (Ethernet) and the
 214          Function Filesystem.
 217        bool "Include configuration with RNDIS (Ethernet)"
 218        depends on USB_FUNCTIONFS && NET
 219        select USB_U_ETHER
 220        select USB_F_RNDIS
 221        help
 222          Include a configuration with RNDIS function (Ethernet) and the Filesystem.
 225        bool "Include 'pure' configuration"
 226        depends on USB_FUNCTIONFS
 227        help
 228          Include a configuration with the Function Filesystem alone with
 229          no Ethernet interface.
 232        tristate "Mass Storage Gadget"
 233        depends on BLOCK
 234        select USB_LIBCOMPOSITE
 235        select USB_F_MASS_STORAGE
 236        help
 237          The Mass Storage Gadget acts as a USB Mass Storage disk drive.
 238          As its storage repository it can use a regular file or a block
 239          device (in much the same way as the "loop" device driver),
 240          specified as a module parameter or sysfs option.
 242          This driver is a replacement for now removed File-backed
 243          Storage Gadget (g_file_storage).
 245          Say "y" to link the driver statically, or "m" to build
 246          a dynamically linked module called "g_mass_storage".
 249        tristate "USB Gadget Target Fabric Module"
 250        depends on TARGET_CORE
 251        select USB_LIBCOMPOSITE
 252        select USB_F_TCM
 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        select USB_F_PRINTER
 305        help
 306          The Printer Gadget channels data between the USB host and a
 307          userspace program driving the print engine. The user space
 308          program reads and writes the device file /dev/g_printer to
 309          receive or send printer data. It can use ioctl calls to
 310          the device file to get or set printer status.
 312          Say "y" to link the driver statically, or "m" to build a
 313          dynamically linked module called "g_printer".
 315          For more information, see Documentation/usb/gadget_printer.txt
 316          which includes sample code for accessing the device file.
 318if TTY
 321        tristate "CDC Composite Device (Ethernet and ACM)"
 322        depends on NET
 323        select USB_LIBCOMPOSITE
 324        select USB_U_SERIAL
 325        select USB_U_ETHER
 326        select USB_F_ACM
 327        select USB_F_ECM
 328        help
 329          This driver provides two functions in one configuration:
 330          a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
 332          This driver requires four bulk and two interrupt endpoints,
 333          plus the ability to handle altsettings.  Not all peripheral
 334          controllers are that capable.
 336          Say "y" to link the driver statically, or "m" to build a
 337          dynamically linked module.
 339config USB_G_NOKIA
 340        tristate "Nokia composite gadget"
 341        depends on PHONET
 342        depends on BLOCK
 343        select USB_LIBCOMPOSITE
 344        select USB_U_SERIAL
 345        select USB_U_ETHER
 346        select USB_F_ACM
 347        select USB_F_OBEX
 348        select USB_F_PHONET
 349        select USB_F_ECM
 350        select USB_F_MASS_STORAGE
 351        help
 352          The Nokia composite gadget provides support for acm, obex
 353          and phonet in only one composite gadget driver.
 355          It's only really useful for N900 hardware. If you're building
 356          a kernel for N900, say Y or M here. If unsure, say N.
 358config USB_G_ACM_MS
 359        tristate "CDC Composite Device (ACM and mass storage)"
 360        depends on BLOCK
 361        select USB_LIBCOMPOSITE
 362        select USB_U_SERIAL
 363        select USB_F_ACM
 364        select USB_F_MASS_STORAGE
 365        help
 366          This driver provides two functions in one configuration:
 367          a mass storage, and a CDC ACM (serial port) link.
 369          Say "y" to link the driver statically, or "m" to build a
 370          dynamically linked module called "g_acm_ms".
 372config USB_G_MULTI
 373        tristate "Multifunction Composite Gadget"
 374        depends on BLOCK && NET
 375        select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
 376        select USB_LIBCOMPOSITE
 377        select USB_U_SERIAL
 378        select USB_U_ETHER
 379        select USB_F_ACM
 380        select USB_F_MASS_STORAGE
 381        help
 382          The Multifunction Composite Gadget provides Ethernet (RNDIS
 383          and/or CDC Ethernet), mass storage and ACM serial link
 384          interfaces.
 386          You will be asked to choose which of the two configurations is
 387          to be available in the gadget.  At least one configuration must
 388          be chosen to make the gadget usable.  Selecting more than one
 389          configuration will prevent Windows from automatically detecting
 390          the gadget as a composite gadget, so an INF file will be needed to
 391          use the gadget.
 393          Say "y" to link the driver statically, or "m" to build a
 394          dynamically linked module called "g_multi".
 396config USB_G_MULTI_RNDIS
 397        bool "RNDIS + CDC Serial + Storage configuration"
 398        depends on USB_G_MULTI
 399        select USB_F_RNDIS
 400        default y
 401        help
 402          This option enables a configuration with RNDIS, CDC Serial and
 403          Mass Storage functions available in the Multifunction Composite
 404          Gadget.  This is the configuration dedicated for Windows since RNDIS
 405          is Microsoft's protocol.
 407          If unsure, say "y".
 409config USB_G_MULTI_CDC
 410        bool "CDC Ethernet + CDC Serial + Storage configuration"
 411        depends on USB_G_MULTI
 412        default n
 413        select USB_F_ECM
 414        help
 415          This option enables a configuration with CDC Ethernet (ECM), CDC
 416          Serial and Mass Storage functions available in the Multifunction
 417          Composite Gadget.
 419          If unsure, say "y".
 421endif # TTY
 423config USB_G_HID
 424        tristate "HID Gadget"
 425        select USB_LIBCOMPOSITE
 426        select USB_F_HID
 427        help
 428          The HID gadget driver provides generic emulation of USB
 429          Human Interface Devices (HID).
 431          For more information, see Documentation/usb/gadget_hid.txt which
 432          includes sample code for accessing the device files.
 434          Say "y" to link the driver statically, or "m" to build a
 435          dynamically linked module called "g_hid".
 437# Standalone / single function gadgets
 438config USB_G_DBGP
 439        tristate "EHCI Debug Device Gadget"
 440        depends on TTY
 441        select USB_LIBCOMPOSITE
 442        help
 443          This gadget emulates an EHCI Debug device. This is useful when you want
 444          to interact with an EHCI Debug Port.
 446          Say "y" to link the driver statically, or "m" to build a
 447          dynamically linked module called "g_dbgp".
 449if USB_G_DBGP
 451        prompt "EHCI Debug Device mode"
 452        default USB_G_DBGP_SERIAL
 454config USB_G_DBGP_PRINTK
 455        depends on USB_G_DBGP
 456        bool "printk"
 457        help
 458          Directly printk() received data. No interaction.
 460config USB_G_DBGP_SERIAL
 461        depends on USB_G_DBGP
 462        select USB_U_SERIAL
 463        bool "serial"
 464        help
 465          Userland can interact using /dev/ttyGSxxx.
 469# put drivers that need isochronous transfer support (for audio
 470# or video class gadget drivers), or specific hardware, here.
 471config USB_G_WEBCAM
 472        tristate "USB Webcam Gadget"
 473        depends on VIDEO_DEV
 474        select USB_LIBCOMPOSITE
 475        select VIDEOBUF2_VMALLOC
 476        select USB_F_UVC
 477        help
 478          The Webcam Gadget acts as a composite USB Audio and Video Class
 479          device. It provides a userspace API to process UVC control requests
 480          and stream video data to the host.
 482          Say "y" to link the driver statically, or "m" to build a
 483          dynamically linked module called "g_webcam".
 484 kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.