USB: fix functionfs for CONFIG_NET disabled
[safe/jmp/linux-2.6] / drivers / usb / gadget / Kconfig
index 77a3759..649c0c5 100644 (file)
 # 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).
 #
-menu "USB Gadget Support"
 
-config USB_GADGET
-       tristate "Support for USB Gadgets"
+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.
@@ -42,9 +41,11 @@ config USB_GADGET
           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"
-       depends on USB_GADGET && DEBUG_KERNEL && EXPERIMENTAL
+       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.
@@ -57,8 +58,8 @@ config USB_GADGET_DEBUG
           production build.
 
 config USB_GADGET_DEBUG_FILES
-       boolean "Debugging information files"
-       depends on USB_GADGET && PROC_FS
+       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
@@ -68,8 +69,8 @@ config USB_GADGET_DEBUG_FILES
           here.  If in doubt, or to conserve kernel memory, say "N".
 
 config USB_GADGET_DEBUG_FS
-       boolean "Debugging information files in debugfs"
-       depends on 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/.
@@ -78,12 +79,36 @@ config USB_GADGET_DEBUG_FS
           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.
+
 config USB_GADGET_SELECTED
        boolean
 
 #
 # 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
@@ -93,34 +118,35 @@ choice
           Many controller drivers are platform-specific; these
           often need board-specific hooks.
 
-config USB_GADGET_AMD5536UDC
-       boolean "AMD5536 UDC"
-       depends on PCI
-       select USB_GADGET_DUALSPEED
+#
+# Integrated controllers
+#
+
+config USB_GADGET_AT91
+       boolean "Atmel AT91 USB Device Port"
+       depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9 && !ARCH_AT91SAM9G45
+       select USB_GADGET_SELECTED
        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.
+          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 "amd5536udc" and force all
+          dynamically linked module called "at91_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_AMD5536UDC
+config USB_AT91
        tristate
-       depends on USB_GADGET_AMD5536UDC
+       depends on USB_GADGET_AT91
        default USB_GADGET
-       select USB_GADGET_SELECTED
 
 config USB_GADGET_ATMEL_USBA
        boolean "Atmel USBA"
        select USB_GADGET_DUALSPEED
-       depends on AVR32
+       depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
        help
          USBA is the integrated high-speed USB Device controller on
-         the AT32AP700x processors from Atmel.
+         the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
 
 config USB_ATMEL_USBA
        tristate
@@ -130,7 +156,7 @@ config USB_ATMEL_USBA
 
 config USB_GADGET_FSL_USB2
        boolean "Freescale Highspeed USB DR Peripheral Controller"
-       depends on MPC834x || PPC_MPC831x
+       depends on FSL_SOC || ARCH_MXC
        select USB_GADGET_DUALSPEED
        help
           Some of Freescale PowerPC processors have a High Speed
@@ -149,31 +175,55 @@ config USB_FSL_USB2
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-config USB_GADGET_NET2280
-       boolean "NetChip 228x"
-       depends on PCI
-       select USB_GADGET_DUALSPEED
+config USB_GADGET_LH7A40X
+       boolean "LH7A40X"
+       depends on ARCH_LH7A40X
        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.
+          This driver provides USB Device Controller driver for LH7A40x
+
+config USB_LH7A40X
+       tristate
+       depends on USB_GADGET_LH7A40X
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_OMAP
+       boolean "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 "net2280" and force all
+          dynamically linked module called "omap_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_NET2280
+config USB_OMAP
        tristate
-       depends on USB_GADGET_NET2280
+       depends on USB_GADGET_OMAP
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-config USB_GADGET_PXA2XX
+config USB_OTG
+       boolean "OTG Support"
+       depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
+       help
+          The most notable feature of USB OTG is support for a
+          "Dual-Role" device, which can act as either a device
+          or a host.  The initial role choice can be changed
+          later, when two dual-role devices talk to each other.
+
+          Select this only if your OMAP board has a Mini-AB connector.
+
+config USB_GADGET_PXA25X
        boolean "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
@@ -183,108 +233,99 @@ config USB_GADGET_PXA2XX
           zero (for control transfers).
 
           Say "y" to link the driver statically, or "m" to build a
-          dynamically linked module called "pxa2xx_udc" and force all
+          dynamically linked module called "pxa25x_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_PXA2XX
+config USB_PXA25X
        tristate
-       depends on USB_GADGET_PXA2XX
+       depends on USB_GADGET_PXA25X
        default USB_GADGET
        select USB_GADGET_SELECTED
 
 # if there's only one gadget driver, using only two bulk endpoints,
 # don't waste memory for the other endpoints
-config USB_PXA2XX_SMALL
-       depends on USB_GADGET_PXA2XX
+config USB_PXA25X_SMALL
+       depends on USB_GADGET_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_GADGET_M66592
-       boolean "Renesas M66592 USB Peripheral Controller"
+config USB_GADGET_R8A66597
+       boolean "Renesas R8A66597 USB Peripheral Controller"
        select USB_GADGET_DUALSPEED
        help
-          M66592 is a discrete USB peripheral controller chip that
+          R8A66597 is a discrete USB host and peripheral controller chip that
           supports both full and high speed USB 2.0 data transfers.
-          It has seven configurable endpoints, and endpoint zero.
+          It has nine 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
+          dynamically linked module called "r8a66597_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_M66592
+config USB_R8A66597
        tristate
-       depends on USB_GADGET_M66592
+       depends on USB_GADGET_R8A66597
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-config USB_GADGET_GOKU
-       boolean "Toshiba TC86C001 'Goku-S'"
-       depends on PCI
+config USB_GADGET_PXA27X
+       boolean "PXA 27x"
+       depends on ARCH_PXA && (PXA27x || PXA3xx)
+       select USB_OTG_UTILS
        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).
+          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 "goku_udc" and to force all
+          dynamically linked module called "pxa27x_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_GOKU
+config USB_PXA27X
        tristate
-       depends on USB_GADGET_GOKU
+       depends on USB_GADGET_PXA27X
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-
-config USB_GADGET_LH7A40X
-       boolean "LH7A40X"
-       depends on ARCH_LH7A40X
+config USB_GADGET_S3C_HSOTG
+       boolean "S3C HS/OtG USB Device controller"
+       depends on S3C_DEV_USB_HSOTG
+       select USB_GADGET_S3C_HSOTG_PIO
        help
-    This driver provides USB Device Controller driver for LH7A40x
+         The Samsung S3C64XX USB2.0 high-speed gadget controller
+         integrated into the S3C64XX series SoC.
 
-config USB_LH7A40X
+config USB_S3C_HSOTG
        tristate
-       depends on USB_GADGET_LH7A40X
+       depends on USB_GADGET_S3C_HSOTG
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-config USB_GADGET_OMAP
-       boolean "OMAP USB Device Controller"
-       depends on ARCH_OMAP
-       select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
+config USB_GADGET_IMX
+       boolean "Freescale IMX USB Peripheral Controller"
+       depends on ARCH_MX1
        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.
+          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 "omap_udc" and force all
+          dynamically linked module called "imx_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_OMAP
+config USB_IMX
        tristate
-       depends on USB_GADGET_OMAP
+       depends on USB_GADGET_IMX
        default USB_GADGET
        select USB_GADGET_SELECTED
 
-config USB_OTG
-       boolean "OTG Support"
-       depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
-       help
-          The most notable feature of USB OTG is support for a
-          "Dual-Role" device, which can act as either a device
-          or a host.  The initial role choice can be changed
-          later, when two dual-role devices talk to each other.
-
-          Select this only if your OMAP board has a Mini-AB connector.
-
 config USB_GADGET_S3C2410
        boolean "S3C2410 USB Device Controller"
        depends on ARCH_S3C2410
@@ -306,27 +347,171 @@ config USB_S3C2410_DEBUG
        boolean "S3C2410 udc debug messages"
        depends on USB_GADGET_S3C2410
 
-config USB_GADGET_AT91
-       boolean "AT91 USB Device Port"
-       depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9
+#
+# Controllers available in both integrated and discrete versions
+#
+
+# musb builds in ../musb along with host support
+config USB_GADGET_MUSB_HDRC
+       boolean "Inventra HDRC USB Peripheral (TI, ADI, ...)"
+       depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
+       select USB_GADGET_DUALSPEED
        select USB_GADGET_SELECTED
        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).
+         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_GADGET_M66592
+       boolean "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 "at91_udc" and force all
+          dynamically linked module called "m66592_udc" and force all
           gadget drivers to also be dynamically linked.
 
-config USB_AT91
+config USB_M66592
        tristate
-       depends on USB_GADGET_AT91
+       depends on USB_GADGET_M66592
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+#
+# Controllers available only in discrete form (and all PCI controllers)
+#
+
+config USB_GADGET_AMD5536UDC
+       boolean "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_AMD5536UDC
+       tristate
+       depends on USB_GADGET_AMD5536UDC
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_FSL_QE
+       boolean "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_FSL_QE
+       tristate
+       depends on USB_GADGET_FSL_QE
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_CI13XXX
+       boolean "MIPS USB CI13xxx"
+       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_CI13XXX
+       tristate
+       depends on USB_GADGET_CI13XXX
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_NET2280
+       boolean "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_NET2280
+       tristate
+       depends on USB_GADGET_NET2280
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_GOKU
+       boolean "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_GOKU
+       tristate
+       depends on USB_GADGET_GOKU
        default USB_GADGET
+       select USB_GADGET_SELECTED
+
+config USB_GADGET_LANGWELL
+       boolean "Intel Langwell USB Device Controller"
+       depends on PCI
+       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_LANGWELL
+       tristate
+       depends on USB_GADGET_LANGWELL
+       default USB_GADGET
+       select USB_GADGET_SELECTED
+
+
+#
+# LAST -- dummy/emulated controller
+#
 
 config USB_GADGET_DUMMY_HCD
        boolean "Dummy HCD (DEVELOPMENT)"
-       depends on (USB=y || (USB=m && USB_GADGET=m)) && EXPERIMENTAL
+       depends on USB=y || (USB=m && USB_GADGET=m)
        select USB_GADGET_DUALSPEED
        help
          This host controller driver emulates USB, looping all data transfer
@@ -393,7 +578,6 @@ choice
 
 config USB_ZERO
        tristate "Gadget Zero (DEVELOPMENT)"
-       depends on EXPERIMENTAL
        help
          Gadget Zero is a two-configuration device.  It either sinks and
          sources bulk data; or it loops back a configurable number of
@@ -426,12 +610,28 @@ config USB_ZERO_HNPTEST
          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 either
-         of two ways:
+         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
@@ -441,7 +641,11 @@ config USB_ETH
           - On hardware can't implement that protocol, a simple CDC subset
             is used, placing fewer demands on USB.
 
-         RNDIS support is a third option, more demanding than that subset.
+          - 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.
@@ -457,8 +661,8 @@ config USB_ETH
          dynamically linked module called "g_ether".
 
 config USB_ETH_RNDIS
-       bool "RNDIS support (EXPERIMENTAL)"
-       depends on USB_ETH && EXPERIMENTAL
+       bool "RNDIS support"
+       depends on USB_ETH
        default y
        help
           Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
@@ -474,6 +678,22 @@ config USB_ETH_RNDIS
           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_GADGETFS
        tristate "Gadget Filesystem (EXPERIMENTAL)"
        depends on EXPERIMENTAL
@@ -484,9 +704,49 @@ config USB_GADGETFS
          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
+       help
+         The Function Filesystem (FunctioFS) lets one create USB
+         composite functions in user space in the same way as 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.
+
+         Say "y" to link the driver statically, or "m" to build
+         a dynamically linked module called "g_ffs".
+
+config USB_FUNCTIONFS_ETH
+       bool "Include CDC ECM (Ethernet) function"
+       depends on USB_FUNCTIONFS && NET
+       help
+         Include an CDC ECM (Ethernet) funcion in the CDC ECM (Funcion)
+         Filesystem.  If you also say "y" to the RNDIS query below the
+         gadget will have two configurations.
+
+config USB_FUNCTIONFS_RNDIS
+       bool "Include RNDIS (Ethernet) function"
+       depends on USB_FUNCTIONFS && NET
+       help
+         Include an RNDIS (Ethernet) funcion in the Funcion Filesystem.
+         If you also say "y" to the CDC ECM query above the gadget will
+         have two configurations.
+
+config USB_FUNCTIONFS_GENERIC
+       bool "Include 'pure' configuration"
+       depends on USB_FUNCTIONFS && (USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
+       help
+         Include a configuration with FunctionFS and no Ethernet
+         configuration.
+
 config USB_FILE_STORAGE
        tristate "File-backed Storage Gadget"
        depends on BLOCK
@@ -509,20 +769,42 @@ config USB_FILE_STORAGE_TEST
          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 is heavily based on File-backed Storage Gadget and in most
+         cases you will want to use FSG instead.  This gadget is mostly
+         here to test the functionality of the Mass Storage Function
+         which may be used with composite framework.
+
+         Say "y" to link the driver statically, or "m" to build
+         a dynamically linked module called "g_mass_storage".  If unsure,
+         consider File-backed Storage Gadget.
+
 config USB_G_SERIAL
-       tristate "Serial Gadget (with CDC ACM support)"
+       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 this driver.
+         make MS-Windows work with CDC ACM.
 
 config USB_MIDI_GADGET
        tristate "MIDI Gadget (EXPERIMENTAL)"
@@ -538,12 +820,111 @@ config USB_MIDI_GADGET
          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
+       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".
 
 # 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.
 
-# - none yet
+         Say "y" to link the driver statically, or "m" to build a
+         dynamically linked module called "g_webcam".
 
 endchoice
 
-endmenu
+endif # USB_GADGET