#
# USB Gadget support on a system involves
#    (a) a peripheral controller, and
#    (b) the gadget driver using it.
#
# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
#
#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
#  - Some systems have both kinds of controllers.
#
# With help from a special transceiver and a "Mini-AB" jack, systems with
# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
#

config USB_ZERO
	tristate "Gadget Zero (DEVELOPMENT)"
	select USB_LIBCOMPOSITE
	select USB_F_SS_LB
	help
	  Gadget Zero is a two-configuration device.  It either sinks and
	  sources bulk data; or it loops back a configurable number of
	  transfers.  It also implements control requests, for "chapter 9"
	  conformance.  The driver needs only two bulk-capable endpoints, so
	  it can work on top of most device-side usb controllers.  It's
	  useful for testing, and is also a working example showing how
	  USB "gadget drivers" can be written.

	  Make this be the first driver you try using on top of any new
	  USB peripheral controller driver.  Then you can use host-side
	  test software, like the "usbtest" driver, to put your hardware
	  and its driver through a basic set of functional tests.

	  Gadget Zero also works with the host-side "usb-skeleton" driver,
	  and with many kinds of host-side test software.  You may need
	  to tweak product and vendor IDs before host software knows about
	  this device, and arrange to select an appropriate configuration.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_zero".

config USB_ZERO_HNPTEST
	bool "HNP Test Device"
	depends on USB_ZERO && USB_OTG
	help
	  You can configure this device to enumerate using the device
	  identifiers of the USB-OTG test device.  That means that when
	  this gadget connects to another OTG device, with this one using
	  the "B-Peripheral" role, that device will use HNP to let this
	  one serve as the USB host instead (in the "B-Host" role).

config USB_AUDIO
	tristate "Audio Gadget"
	depends on SND
	select USB_LIBCOMPOSITE
	select SND_PCM
	select USB_F_UAC1 if GADGET_UAC1
	select USB_F_UAC2 if !GADGET_UAC1
	help
	  This Gadget Audio driver is compatible with USB Audio Class
	  specification 2.0. It implements 1 AudioControl interface,
	  1 AudioStreaming Interface each for USB-OUT and USB-IN.
	  Number of channels, sample rate and sample size can be
	  specified as module parameters.
	  This driver doesn't expect any real Audio codec to be present
	  on the device - the audio streams are simply sinked to and
	  sourced from a virtual ALSA sound card created. The user-space
	  application may choose to do whatever it wants with the data
	  received from the USB Host and choose to provide whatever it
	  wants as audio data to the USB Host.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_audio".

config GADGET_UAC1
	bool "UAC 1.0 (Legacy)"
	depends on USB_AUDIO
	help
	  If you instead want older UAC Spec-1.0 driver that also has audio
	  paths hardwired to the Audio codec chip on-board and doesn't work
	  without one.

config USB_ETH
	tristate "Ethernet Gadget (with CDC Ethernet support)"
	depends on NET
	select USB_LIBCOMPOSITE
	select USB_U_ETHER
	select USB_F_ECM
	select USB_F_SUBSET
	select CRC32
	help
	  This driver implements Ethernet style communication, in one of
	  several ways:

	   - The "Communication Device Class" (CDC) Ethernet Control Model.
	     That protocol is often avoided with pure Ethernet adapters, in
	     favor of simpler vendor-specific hardware, but is widely
	     supported by firmware for smart network devices.

	   - On hardware can't implement that protocol, a simple CDC subset
	     is used, placing fewer demands on USB.

	   - CDC Ethernet Emulation Model (EEM) is a newer standard that has
	     a simpler interface that can be used by more USB hardware.

	  RNDIS support is an additional option, more demanding than than
	  subset.

	  Within the USB device, this gadget driver exposes a network device
	  "usbX", where X depends on what other networking devices you have.
	  Treat it like a two-node Ethernet link:  host, and gadget.

	  The Linux-USB host-side "usbnet" driver interoperates with this
	  driver, so that deep I/O queues can be supported.  On 2.4 kernels,
	  use "CDCEther" instead, if you're using the CDC option. That CDC
	  mode should also interoperate with standard CDC Ethernet class
	  drivers on other host operating systems.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_ether".

config USB_ETH_RNDIS
	bool "RNDIS support"
	depends on USB_ETH
	select USB_LIBCOMPOSITE
	select USB_F_RNDIS
	default y
	help
	   Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
	   and Microsoft provides redistributable binary RNDIS drivers for
	   older versions of Windows.

	   If you say "y" here, the Ethernet gadget driver will try to provide
	   a second device configuration, supporting RNDIS to talk to such
	   Microsoft USB hosts.

	   To make MS-Windows work with this, use Documentation/usb/linux.inf
	   as the "driver info file".  For versions of MS-Windows older than
	   XP, you'll need to download drivers from Microsoft's website; a URL
	   is given in comments found in that info file.

config USB_ETH_EEM
       bool "Ethernet Emulation Model (EEM) support"
       depends on USB_ETH
	select USB_LIBCOMPOSITE
	select USB_F_EEM
       default n
       help
         CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
         and therefore can be supported by more hardware.  Technically ECM and
         EEM are designed for different applications.  The ECM model extends
         the network interface to the target (e.g. a USB cable modem), and the
         EEM model is for mobile devices to communicate with hosts using
         ethernet over USB.  For Linux gadgets, however, the interface with
         the host is the same (a usbX device), so the differences are minimal.

         If you say "y" here, the Ethernet gadget driver will use the EEM
         protocol rather than ECM.  If unsure, say "n".

config USB_G_NCM
	tristate "Network Control Model (NCM) support"
	depends on NET
	select USB_LIBCOMPOSITE
	select USB_U_ETHER
	select USB_F_NCM
	select CRC32
	help
	  This driver implements USB CDC NCM subclass standard. NCM is
	  an advanced protocol for Ethernet encapsulation, allows grouping
	  of several ethernet frames into one USB transfer and different
	  alignment possibilities.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_ncm".

config USB_GADGETFS
	tristate "Gadget Filesystem"
	help
	  This driver provides a filesystem based API that lets user mode
	  programs implement a single-configuration USB device, including
	  endpoint I/O and control requests that don't relate to enumeration.
	  All endpoints, transfer speeds, and transfer types supported by
	  the hardware are available, through read() and write() calls.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "gadgetfs".

config USB_FUNCTIONFS
	tristate "Function Filesystem"
	select USB_LIBCOMPOSITE
	select USB_F_FS
	select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
	help
	  The Function Filesystem (FunctionFS) lets one create USB
	  composite functions in user space in the same way GadgetFS
	  lets one create USB gadgets in user space.  This allows creation
	  of composite gadgets such that some of the functions are
	  implemented in kernel space (for instance Ethernet, serial or
	  mass storage) and other are implemented in user space.

	  If you say "y" or "m" here you will be able what kind of
	  configurations the gadget will provide.

	  Say "y" to link the driver statically, or "m" to build
	  a dynamically linked module called "g_ffs".

config USB_FUNCTIONFS_ETH
	bool "Include configuration with CDC ECM (Ethernet)"
	depends on USB_FUNCTIONFS && NET
	select USB_U_ETHER
	select USB_F_ECM
	select USB_F_SUBSET
	help
	  Include a configuration with CDC ECM function (Ethernet) and the
	  Function Filesystem.

config USB_FUNCTIONFS_RNDIS
	bool "Include configuration with RNDIS (Ethernet)"
	depends on USB_FUNCTIONFS && NET
	select USB_U_ETHER
	select USB_F_RNDIS
	help
	  Include a configuration with RNDIS function (Ethernet) and the Filesystem.

config USB_FUNCTIONFS_GENERIC
	bool "Include 'pure' configuration"
	depends on USB_FUNCTIONFS
	help
	  Include a configuration with the Function Filesystem alone with
	  no Ethernet interface.

config USB_MASS_STORAGE
	tristate "Mass Storage Gadget"
	depends on BLOCK
	select USB_LIBCOMPOSITE
	select USB_F_MASS_STORAGE
	help
	  The Mass Storage Gadget acts as a USB Mass Storage disk drive.
	  As its storage repository it can use a regular file or a block
	  device (in much the same way as the "loop" device driver),
	  specified as a module parameter or sysfs option.

	  This driver is a replacement for now removed File-backed
	  Storage Gadget (g_file_storage).

	  Say "y" to link the driver statically, or "m" to build
	  a dynamically linked module called "g_mass_storage".

config USB_GADGET_TARGET
	tristate "USB Gadget Target Fabric Module"
	depends on TARGET_CORE
	select USB_LIBCOMPOSITE
	help
	  This fabric is an USB gadget. Two USB protocols are supported that is
	  BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is
	  advertised on alternative interface 0 (primary) and UAS is on
	  alternative interface 1. Both protocols can work on USB2.0 and USB3.0.
	  UAS utilizes the USB 3.0 feature called streams support.

config USB_G_SERIAL
	tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
	depends on TTY
	select USB_U_SERIAL
	select USB_F_ACM
	select USB_F_SERIAL
	select USB_F_OBEX
	select USB_LIBCOMPOSITE
	help
	  The Serial Gadget talks to the Linux-USB generic serial driver.
	  This driver supports a CDC-ACM module option, which can be used
	  to interoperate with MS-Windows hosts or with the Linux-USB
	  "cdc-acm" driver.

	  This driver also supports a CDC-OBEX option.  You will need a
	  user space OBEX server talking to /dev/ttyGS*, since the kernel
	  itself doesn't implement the OBEX protocol.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_serial".

	  For more information, see Documentation/usb/gadget_serial.txt
	  which includes instructions and a "driver info file" needed to
	  make MS-Windows work with CDC ACM.

config USB_MIDI_GADGET
	tristate "MIDI Gadget"
	depends on SND
	select USB_LIBCOMPOSITE
	select SND_RAWMIDI
	select USB_F_MIDI
	help
	  The MIDI Gadget acts as a USB Audio device, with one MIDI
	  input and one MIDI output. These MIDI jacks appear as
	  a sound "card" in the ALSA sound system. Other MIDI
	  connections can then be made on the gadget system, using
	  ALSA's aconnect utility etc.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_midi".

config USB_G_PRINTER
	tristate "Printer Gadget"
	select USB_LIBCOMPOSITE
	select USB_F_PRINTER
	help
	  The Printer Gadget channels data between the USB host and a
	  userspace program driving the print engine. The user space
	  program reads and writes the device file /dev/g_printer to
	  receive or send printer data. It can use ioctl calls to
	  the device file to get or set printer status.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_printer".

	  For more information, see Documentation/usb/gadget_printer.txt
	  which includes sample code for accessing the device file.

if TTY

config USB_CDC_COMPOSITE
	tristate "CDC Composite Device (Ethernet and ACM)"
	depends on NET
	select USB_LIBCOMPOSITE
	select USB_U_SERIAL
	select USB_U_ETHER
	select USB_F_ACM
	select USB_F_ECM
	help
	  This driver provides two functions in one configuration:
	  a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.

	  This driver requires four bulk and two interrupt endpoints,
	  plus the ability to handle altsettings.  Not all peripheral
	  controllers are that capable.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module.

config USB_G_NOKIA
	tristate "Nokia composite gadget"
	depends on PHONET
	depends on BLOCK
	select USB_LIBCOMPOSITE
	select USB_U_SERIAL
	select USB_U_ETHER
	select USB_F_ACM
	select USB_F_OBEX
	select USB_F_PHONET
	select USB_F_ECM
	select USB_F_MASS_STORAGE
	help
	  The Nokia composite gadget provides support for acm, obex
	  and phonet in only one composite gadget driver.

	  It's only really useful for N900 hardware. If you're building
	  a kernel for N900, say Y or M here. If unsure, say N.

config USB_G_ACM_MS
	tristate "CDC Composite Device (ACM and mass storage)"
	depends on BLOCK
	select USB_LIBCOMPOSITE
	select USB_U_SERIAL
	select USB_F_ACM
	select USB_F_MASS_STORAGE
	help
	  This driver provides two functions in one configuration:
	  a mass storage, and a CDC ACM (serial port) link.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_acm_ms".

config USB_G_MULTI
	tristate "Multifunction Composite Gadget"
	depends on BLOCK && NET
	select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
	select USB_LIBCOMPOSITE
	select USB_U_SERIAL
	select USB_U_ETHER
	select USB_F_ACM
	select USB_F_MASS_STORAGE
	help
	  The Multifunction Composite Gadget provides Ethernet (RNDIS
	  and/or CDC Ethernet), mass storage and ACM serial link
	  interfaces.

	  You will be asked to choose which of the two configurations is
	  to be available in the gadget.  At least one configuration must
	  be chosen to make the gadget usable.  Selecting more than one
	  configuration will prevent Windows from automatically detecting
	  the gadget as a composite gadget, so an INF file will be needed to
	  use the gadget.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_multi".

config USB_G_MULTI_RNDIS
	bool "RNDIS + CDC Serial + Storage configuration"
	depends on USB_G_MULTI
	select USB_F_RNDIS
	default y
	help
	  This option enables a configuration with RNDIS, CDC Serial and
	  Mass Storage functions available in the Multifunction Composite
	  Gadget.  This is the configuration dedicated for Windows since RNDIS
	  is Microsoft's protocol.

	  If unsure, say "y".

config USB_G_MULTI_CDC
	bool "CDC Ethernet + CDC Serial + Storage configuration"
	depends on USB_G_MULTI
	default n
	select USB_F_ECM
	help
	  This option enables a configuration with CDC Ethernet (ECM), CDC
	  Serial and Mass Storage functions available in the Multifunction
	  Composite Gadget.

	  If unsure, say "y".

endif # TTY

config USB_G_HID
	tristate "HID Gadget"
	select USB_LIBCOMPOSITE
	select USB_F_HID
	help
	  The HID gadget driver provides generic emulation of USB
	  Human Interface Devices (HID).

	  For more information, see Documentation/usb/gadget_hid.txt which
	  includes sample code for accessing the device files.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_hid".

# Standalone / single function gadgets
config USB_G_DBGP
	tristate "EHCI Debug Device Gadget"
	depends on TTY
	select USB_LIBCOMPOSITE
	help
	  This gadget emulates an EHCI Debug device. This is useful when you want
	  to interact with an EHCI Debug Port.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_dbgp".

if USB_G_DBGP
choice
	prompt "EHCI Debug Device mode"
	default USB_G_DBGP_SERIAL

config USB_G_DBGP_PRINTK
	depends on USB_G_DBGP
	bool "printk"
	help
	  Directly printk() received data. No interaction.

config USB_G_DBGP_SERIAL
	depends on USB_G_DBGP
	select USB_U_SERIAL
	bool "serial"
	help
	  Userland can interact using /dev/ttyGSxxx.
endchoice
endif

# put drivers that need isochronous transfer support (for audio
# or video class gadget drivers), or specific hardware, here.
config USB_G_WEBCAM
	tristate "USB Webcam Gadget"
	depends on VIDEO_DEV
	select USB_LIBCOMPOSITE
	select VIDEOBUF2_VMALLOC
	select USB_F_UVC
	help
	  The Webcam Gadget acts as a composite USB Audio and Video Class
	  device. It provides a userspace API to process UVC control requests
	  and stream video data to the host.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "g_webcam".
