#
# 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).
#

menuconfig USB_GADGET
	tristate "USB Gadget Support"
	help
	   USB is a master/slave protocol, organized with one master
	   host (such as a PC) controlling up to 127 peripheral devices.
	   The USB hardware is asymmetric, which makes it easier to set up:
	   you can't connect a "to-the-host" connector to a peripheral.

	   Linux can run in the host, or in the peripheral.  In both cases
	   you need a low level bus controller driver, and some software
	   talking to it.  Peripheral controllers are often discrete silicon,
	   or are integrated with the CPU in a microcontroller.  The more
	   familiar host side controllers have names like "EHCI", "OHCI",
	   or "UHCI", and are usually integrated into southbridges on PC
	   motherboards.

	   Enable this configuration option if you want to run Linux inside
	   a USB peripheral device.  Configure one hardware driver for your
	   peripheral/device side bus controller, and a "gadget driver" for
	   your peripheral protocol.  (If you use modular gadget drivers,
	   you may configure more than one.)

	   If in doubt, say "N" and don't enable these drivers; most people
	   don't have this kind of hardware (except maybe inside Linux PDAs).

	   For more information, see <http://www.linux-usb.org/gadget> and
	   the kernel DocBook documentation for this API.

if USB_GADGET

config USB_GADGET_DEBUG
	boolean "Debugging messages (DEVELOPMENT)"
	depends on DEBUG_KERNEL
	help
	   Many controller and gadget drivers will print some debugging
	   messages if you use this option to ask for those messages.

	   Avoid enabling these messages, even if you're actively
	   debugging such a driver.  Many drivers will emit so many
	   messages that the driver timings are affected, which will
	   either create new failure modes or remove the one you're
	   trying to track down.  Never enable these messages for a
	   production build.

config USB_GADGET_DEBUG_FILES
	boolean "Debugging information files (DEVELOPMENT)"
	depends on PROC_FS
	help
	   Some of the drivers in the "gadget" framework can expose
	   debugging information in files such as /proc/driver/udc
	   (for a peripheral controller).  The information in these
	   files may help when you're troubleshooting or bringing up a
	   driver on a new board.   Enable these files by choosing "Y"
	   here.  If in doubt, or to conserve kernel memory, say "N".

config USB_GADGET_DEBUG_FS
	boolean "Debugging information files in debugfs (DEVELOPMENT)"
	depends on DEBUG_FS
	help
	   Some of the drivers in the "gadget" framework can expose
	   debugging information in files under /sys/kernel/debug/.
	   The information in these files may help when you're
	   troubleshooting or bringing up a driver on a new board.
	   Enable these files by choosing "Y" here.  If in doubt, or
	   to conserve kernel memory, say "N".

config USB_GADGET_VBUS_DRAW
	int "Maximum VBUS Power usage (2-500 mA)"
	range 2 500
	default 2
	help
	   Some devices need to draw power from USB when they are
	   configured, perhaps to operate circuitry or to recharge
	   batteries.  This is in addition to any local power supply,
	   such as an AC adapter or batteries.

	   Enter the maximum power your device draws through USB, in
	   milliAmperes.  The permitted range of values is 2 - 500 mA;
	   0 mA would be legal, but can make some hosts misbehave.

	   This value will be used except for system-specific gadget
	   drivers that have more specific information.

#
# USB Peripheral Controller Support
#
# The order here is alphabetical, except that integrated controllers go
# before discrete ones so they will be the initial/default value:
#   - integrated/SOC controllers first
#   - licensed IP used in both SOC and discrete versions
#   - discrete ones (including all PCI-only controllers)
#   - debug/dummy gadget+hcd is last.
#
choice
	prompt "USB Peripheral Controller"
	depends on USB_GADGET
	help
	   A USB device uses a controller to talk to its host.
	   Systems should have only one such upstream link.
	   Many controller drivers are platform-specific; these
	   often need board-specific hooks.

#
# Integrated controllers
#

config USB_AT91
	tristate "Atmel AT91 USB Device Port"
	depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9 && !ARCH_AT91SAM9G45
	help
	   Many Atmel AT91 processors (such as the AT91RM2000) have a
	   full speed USB Device Port with support for five configurable
	   endpoints (plus endpoint zero).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "at91_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_ATMEL_USBA
	tristate "Atmel USBA"
	select USB_GADGET_DUALSPEED
	depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
	help
	  USBA is the integrated high-speed USB Device controller on
	  the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.

config USB_FSL_USB2
	tristate "Freescale Highspeed USB DR Peripheral Controller"
	depends on FSL_SOC || ARCH_MXC
	select USB_GADGET_DUALSPEED
	select USB_FSL_MPH_DR_OF if OF
	help
	   Some of Freescale PowerPC processors have a High Speed
	   Dual-Role(DR) USB controller, which supports device mode.

	   The number of programmable endpoints is different through
	   SOC revisions.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "fsl_usb2_udc" and force
	   all gadget drivers to also be dynamically linked.

config USB_FUSB300
	tristate "Faraday FUSB300 USB Peripheral Controller"
	depends on !PHYS_ADDR_T_64BIT
	select USB_GADGET_DUALSPEED
	help
	   Faraday usb device controller FUSB300 driver

config USB_OMAP
	tristate "OMAP USB Device Controller"
	depends on ARCH_OMAP
	select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG
	select USB_OTG_UTILS if ARCH_OMAP
	help
	   Many Texas Instruments OMAP processors have flexible full
	   speed USB device controllers, with support for up to 30
	   endpoints (plus endpoint zero).  This driver supports the
	   controller in the OMAP 1611, and should work with controllers
	   in other OMAP processors too, given minor tweaks.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "omap_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA25X
	tristate "PXA 25x or IXP 4xx"
	depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
	select USB_OTG_UTILS
	help
	   Intel's PXA 25x series XScale ARM-5TE processors include
	   an integrated full speed USB 1.1 device controller.  The
	   controller in the IXP 4xx series is register-compatible.

	   It has fifteen fixed-function endpoints, as well as endpoint
	   zero (for control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "pxa25x_udc" and force all
	   gadget drivers to also be dynamically linked.

# if there's only one gadget driver, using only two bulk endpoints,
# don't waste memory for the other endpoints
config USB_PXA25X_SMALL
	depends on USB_PXA25X
	bool
	default n if USB_ETH_RNDIS
	default y if USB_ZERO
	default y if USB_ETH
	default y if USB_G_SERIAL

config USB_R8A66597
	tristate "Renesas R8A66597 USB Peripheral Controller"
	select USB_GADGET_DUALSPEED
	help
	   R8A66597 is a discrete USB host and peripheral controller chip that
	   supports both full and high speed USB 2.0 data transfers.
	   It has nine configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "r8a66597_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_RENESAS_USBHS_UDC
	tristate 'Renesas USBHS controller'
	depends on SUPERH || ARCH_SHMOBILE
	depends on USB_RENESAS_USBHS
	select USB_GADGET_DUALSPEED
	help
	   Renesas USBHS is a discrete USB host and peripheral controller chip
	   that supports both full and high speed USB 2.0 data transfers.
	   It has nine or more configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "renesas_usbhs" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA27X
	tristate "PXA 27x"
	depends on ARCH_PXA && (PXA27x || PXA3xx)
	select USB_OTG_UTILS
	help
	   Intel's PXA 27x series XScale ARM v5TE processors include
	   an integrated full speed USB 1.1 device controller.

	   It has up to 23 endpoints, as well as endpoint zero (for
	   control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "pxa27x_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_S3C_HSOTG
	tristate "S3C HS/OtG USB Device controller"
	depends on S3C_DEV_USB_HSOTG
	select USB_GADGET_S3C_HSOTG_PIO
	select USB_GADGET_DUALSPEED
	help
	  The Samsung S3C64XX USB2.0 high-speed gadget controller
	  integrated into the S3C64XX series SoC.

config USB_IMX
	tristate "Freescale IMX USB Peripheral Controller"
	depends on ARCH_MX1
	help
	   Freescale's IMX series include an integrated full speed
	   USB 1.1 device controller.  The controller in the IMX series
	   is register-compatible.

	   It has Six fixed-function endpoints, as well as endpoint
	   zero (for control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "imx_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_S3C2410
	tristate "S3C2410 USB Device Controller"
	depends on ARCH_S3C2410
	help
	  Samsung's S3C2410 is an ARM-4 processor with an integrated
	  full speed USB 1.1 device controller.  It has 4 configurable
	  endpoints, as well as endpoint zero (for control transfers).

	  This driver has been tested on the S3C2410, S3C2412, and
	  S3C2440 processors.

config USB_S3C2410_DEBUG
	boolean "S3C2410 udc debug messages"
	depends on USB_S3C2410

config USB_S3C_HSUDC
	tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
	depends on ARCH_S3C2410
	select USB_GADGET_DUALSPEED
	help
	  Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC
	  integrated with dual speed USB 2.0 device controller. It has
	  8 endpoints, as well as endpoint zero.

	  This driver has been tested on S3C2416 and S3C2450 processors.

config USB_PXA_U2O
	tristate "PXA9xx Processor USB2.0 controller"
	depends on ARCH_MMP
	select USB_GADGET_DUALSPEED
	help
	  PXA9xx Processor series include a high speed USB2.0 device
	  controller, which support high speed and full speed USB peripheral.

#
# Controllers available in both integrated and discrete versions
#

# musb builds in ../musb along with host support
config USB_GADGET_MUSB_HDRC
	tristate "Inventra HDRC USB Peripheral (TI, ADI, ...)"
	depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
	select USB_GADGET_DUALSPEED
	help
	  This OTG-capable silicon IP is used in dual designs including
	  the TI DaVinci, OMAP 243x, OMAP 343x, TUSB 6010, and ADI Blackfin

config USB_M66592
	tristate "Renesas M66592 USB Peripheral Controller"
	select USB_GADGET_DUALSPEED
	help
	   M66592 is a discrete USB peripheral controller chip that
	   supports both full and high speed USB 2.0 data transfers.
	   It has seven configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "m66592_udc" and force all
	   gadget drivers to also be dynamically linked.

#
# Controllers available only in discrete form (and all PCI controllers)
#

config USB_AMD5536UDC
	tristate "AMD5536 UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
	   The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
	   It is a USB Highspeed DMA capable USB device controller. Beside ep0
	   it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
	   The UDC port supports OTG operation, and may be used as a host port
	   if it's not being used to implement peripheral or OTG roles.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "amd5536udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_FSL_QE
	tristate "Freescale QE/CPM USB Device Controller"
	depends on FSL_SOC && (QUICC_ENGINE || CPM)
	help
	   Some of Freescale PowerPC processors have a Full Speed
	   QE/CPM2 USB controller, which support device mode with 4
	   programmable endpoints. This driver supports the
	   controller in the MPC8360 and MPC8272, and should work with
	   controllers having QE or CPM2, given minor tweaks.

	   Set CONFIG_USB_GADGET to "m" to build this driver as a
	   dynamically linked module called "fsl_qe_udc".

config USB_CI13XXX_PCI
	tristate "MIPS USB CI13xxx PCI UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
	  MIPS USB IP core family device controller
	  Currently it only supports IP part number CI13412

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "ci13xxx_udc" and force all
	  gadget drivers to also be dynamically linked.

config USB_NET2272
	tristate "PLX NET2272"
	select USB_GADGET_DUALSPEED
	help
	  PLX NET2272 is a USB peripheral controller which supports
	  both full and high speed USB 2.0 data transfers.

	  It has three configurable endpoints, as well as endpoint zero
	  (for control transfer).
	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "net2272" and force all
	  gadget drivers to also be dynamically linked.

config USB_NET2272_DMA
	boolean "Support external DMA controller"
	depends on USB_NET2272
	help
	  The NET2272 part can optionally support an external DMA
	  controller, but your board has to have support in the
	  driver itself.

	  If unsure, say "N" here.  The driver works fine in PIO mode.

config USB_NET2280
	tristate "NetChip 228x"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
	   NetChip 2280 / 2282 is a PCI based USB peripheral controller which
	   supports both full and high speed USB 2.0 data transfers.

	   It has six configurable endpoints, as well as endpoint zero
	   (for control transfers) and several endpoints with dedicated
	   functions.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "net2280" and force all
	   gadget drivers to also be dynamically linked.

config USB_GOKU
	tristate "Toshiba TC86C001 'Goku-S'"
	depends on PCI
	help
	   The Toshiba TC86C001 is a PCI device which includes controllers
	   for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).

	   The device controller has three configurable (bulk or interrupt)
	   endpoints, plus endpoint zero (for control transfers).

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "goku_udc" and to force all
	   gadget drivers to also be dynamically linked.

config USB_LANGWELL
	tristate "Intel Langwell USB Device Controller"
	depends on PCI
	depends on !PHYS_ADDR_T_64BIT
	select USB_GADGET_DUALSPEED
	help
	   Intel Langwell USB Device Controller is a High-Speed USB
	   On-The-Go device controller.

	   The number of programmable endpoints is different through
	   controller revision.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "langwell_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_EG20T
	tristate "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
	  This is a USB device driver for EG20T PCH.
	  EG20T PCH is the platform controller hub that is used in Intel's
	  general embedded platform. EG20T PCH has USB device interface.
	  Using this interface, it is able to access system devices connected
	  to USB device.
	  This driver enables USB device function.
	  USB device is a USB peripheral controller which
	  supports both full and high speed USB 2.0 data transfers.
	  This driver supports both control transfer and bulk transfer modes.
	  This driver dose not support interrupt transfer or isochronous
	  transfer modes.

	  This driver also can be used for OKI SEMICONDUCTOR's ML7213 which is
	  for IVI(In-Vehicle Infotainment) use.
	  ML7213 is companion chip for Intel Atom E6xx series.
	  ML7213 is completely compatible for Intel EG20T PCH.

config USB_CI13XXX_MSM
	tristate "MIPS USB CI13xxx for MSM"
	depends on ARCH_MSM
	select USB_GADGET_DUALSPEED
	select USB_MSM_OTG
	help
	  MSM SoC has chipidea USB controller.  This driver uses
	  ci13xxx_udc core.
	  This driver depends on OTG driver for PHY initialization,
	  clock management, powering up VBUS, and power management.
	  This driver is not supported on boards like trout which
	  has an external PHY.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "ci13xxx_msm" and force all
	  gadget drivers to also be dynamically linked.

#
# LAST -- dummy/emulated controller
#

config USB_DUMMY_HCD
	tristate "Dummy HCD (DEVELOPMENT)"
	depends on USB=y || (USB=m && USB_GADGET=m)
	select USB_GADGET_DUALSPEED
	select USB_GADGET_SUPERSPEED
	help
	  This host controller driver emulates USB, looping all data transfer
	  requests back to a USB "gadget driver" in the same host.  The host
	  side is the master; the gadget side is the slave.  Gadget drivers
	  can be high, full, or low speed; and they have access to endpoints
	  like those from NET2280, PXA2xx, or SA1100 hardware.

	  This may help in some stages of creating a driver to embed in a
	  Linux device, since it lets you debug several parts of the gadget
	  driver without its hardware or drivers being involved.

	  Since such a gadget side driver needs to interoperate with a host
	  side Linux-USB device driver, this may help to debug both sides
	  of a USB protocol stack.

	  Say "y" to link the driver statically, or "m" to build a
	  dynamically linked module called "dummy_hcd" and force all
	  gadget drivers to also be dynamically linked.

# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
# first and will be selected by default.

endchoice

# Selected by UDC drivers that support high-speed operation.
config USB_GADGET_DUALSPEED
	bool
	depends on USB_GADGET

# Selected by UDC drivers that support super-speed opperation
config USB_GADGET_SUPERSPEED
	bool
	depends on USB_GADGET
	depends on USB_GADGET_DUALSPEED

#
# USB Gadget Drivers
#
choice
	tristate "USB Gadget Drivers"
	depends on USB_GADGET
	default USB_ETH
	help
	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
	  driver through the abstract "gadget" API.  Some other operating
	  systems call these "client" drivers, of which "class drivers"
	  are a subset (implementing a USB device class specification).
	  A gadget driver implements one or more USB functions using
	  the peripheral hardware.

	  Gadget drivers are hardware-neutral, or "platform independent",
	  except that they sometimes must understand quirks or limitations
	  of the particular controllers they work with.  For example, when
	  a controller doesn't support alternate configurations or provide
	  enough of the right types of endpoints, the gadget driver might
	  not be able work with that controller, or might need to implement
	  a less common variant of a device class protocol.

# this first set of drivers all depend on bulk-capable hardware.

config USB_ZERO
	tristate "Gadget Zero (DEVELOPMENT)"
	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
	boolean "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 (EXPERIMENTAL)"
	depends on SND
	select SND_PCM
	help
	  Gadget Audio is compatible with USB Audio Class specification 1.0.
	  It will include at least one AudioControl interface, zero or more
	  AudioStream interface and zero or more MIDIStream interface.

	  Gadget Audio will use on-board ALSA (CONFIG_SND) audio card to
	  playback or capture audio stream.

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

config USB_ETH
	tristate "Ethernet Gadget (with CDC Ethernet support)"
	depends on NET
	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
	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
       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 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 diffferent
	  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 (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	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.

	  Currently, this option is still labelled as EXPERIMENTAL because
	  of existing race conditions in the underlying in-kernel AIO core.

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

config USB_FUNCTIONFS
	tristate "Function Filesystem (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	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
	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
	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_FILE_STORAGE
	tristate "File-backed Storage Gadget (DEPRECATED)"
	depends on BLOCK
	help
	  The File-backed 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.

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

	  NOTE: This driver is deprecated.  Its replacement is the
	  Mass Storage Gadget.

config USB_FILE_STORAGE_TEST
	bool "File-backed Storage Gadget testing version"
	depends on USB_FILE_STORAGE
	default n
	help
	  Say "y" to generate the larger testing version of the
	  File-backed Storage Gadget, useful for probing the
	  behavior of USB Mass Storage hosts.  Not needed for
	  normal operation.

config USB_MASS_STORAGE
	tristate "Mass Storage Gadget"
	depends on BLOCK
	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 an updated replacement for the deprecated
	  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_G_SERIAL
	tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
	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 (EXPERIMENTAL)"
	depends on SND && EXPERIMENTAL
	select SND_RAWMIDI
	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"
	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.

config USB_CDC_COMPOSITE
	tristate "CDC Composite Device (Ethernet and ACM)"
	depends on NET
	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
	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_MULTI
	tristate "Multifunction Composite Gadget (EXPERIMENTAL)"
	depends on BLOCK && NET
	select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
	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
	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
	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".

config USB_G_HID
	tristate "HID Gadget"
	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".

config USB_G_DBGP
	tristate "EHCI Debug Device Gadget"
	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
	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
	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".

endchoice

endif # USB_GADGET
