]> git.karo-electronics.de Git - linux-beck.git/commitdiff
usb: gadget: Gadget directory cleanup - group legacy gadgets
authorAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Tue, 15 Jul 2014 11:09:44 +0000 (13:09 +0200)
committerFelipe Balbi <balbi@ti.com>
Wed, 16 Jul 2014 17:14:05 +0000 (12:14 -0500)
The drivers/usb/gadget directory contains many files.
Files which are related can be distributed into separate directories.
This patch moves the legacy gadgets (i.e. those not using configfs)
into a separate directory.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
23 files changed:
drivers/usb/gadget/Kconfig
drivers/usb/gadget/Makefile
drivers/usb/gadget/legacy/Kconfig [new file with mode: 0644]
drivers/usb/gadget/legacy/Makefile [new file with mode: 0644]
drivers/usb/gadget/legacy/acm_ms.c [moved from drivers/usb/gadget/acm_ms.c with 100% similarity]
drivers/usb/gadget/legacy/audio.c [moved from drivers/usb/gadget/audio.c with 100% similarity]
drivers/usb/gadget/legacy/cdc2.c [moved from drivers/usb/gadget/cdc2.c with 100% similarity]
drivers/usb/gadget/legacy/dbgp.c [moved from drivers/usb/gadget/dbgp.c with 100% similarity]
drivers/usb/gadget/legacy/ether.c [moved from drivers/usb/gadget/ether.c with 100% similarity]
drivers/usb/gadget/legacy/g_ffs.c [moved from drivers/usb/gadget/g_ffs.c with 100% similarity]
drivers/usb/gadget/legacy/gmidi.c [moved from drivers/usb/gadget/gmidi.c with 100% similarity]
drivers/usb/gadget/legacy/hid.c [moved from drivers/usb/gadget/hid.c with 100% similarity]
drivers/usb/gadget/legacy/inode.c [moved from drivers/usb/gadget/inode.c with 100% similarity]
drivers/usb/gadget/legacy/mass_storage.c [moved from drivers/usb/gadget/mass_storage.c with 100% similarity]
drivers/usb/gadget/legacy/multi.c [moved from drivers/usb/gadget/multi.c with 100% similarity]
drivers/usb/gadget/legacy/ncm.c [moved from drivers/usb/gadget/ncm.c with 100% similarity]
drivers/usb/gadget/legacy/nokia.c [moved from drivers/usb/gadget/nokia.c with 100% similarity]
drivers/usb/gadget/legacy/printer.c [moved from drivers/usb/gadget/printer.c with 100% similarity]
drivers/usb/gadget/legacy/serial.c [moved from drivers/usb/gadget/serial.c with 100% similarity]
drivers/usb/gadget/legacy/tcm_usb_gadget.c [moved from drivers/usb/gadget/tcm_usb_gadget.c with 100% similarity]
drivers/usb/gadget/legacy/tcm_usb_gadget.h [moved from drivers/usb/gadget/tcm_usb_gadget.h with 100% similarity]
drivers/usb/gadget/legacy/webcam.c [moved from drivers/usb/gadget/webcam.c with 100% similarity]
drivers/usb/gadget/legacy/zero.c [moved from drivers/usb/gadget/zero.c with 100% similarity]

index 49e434ec527d52f81c341f9a12bf0f2dc08c1815..2986a4369df4a25800d4600e3d204e3ab66b1b4a 100644 (file)
@@ -722,466 +722,7 @@ config USB_CONFIGFS_F_FS
          implemented in kernel space (for instance Ethernet, serial or
          mass storage) and other are implemented in user space.
 
-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
-       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"
-       depends on SND
-       select USB_LIBCOMPOSITE
-       select SND_PCM
-       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
-       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
-       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
-       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
-       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
-       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
-       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".
+source "drivers/usb/gadget/legacy/Kconfig"
 
 endchoice
 
index 49514ea60a98a7b740c734bd6904cd76bcdff128..61d2503ef561f232984d94d86f8b073e7149d869 100644 (file)
@@ -1,8 +1,8 @@
 #
 # USB peripheral controller drivers
 #
-ccflags-$(CONFIG_USB_GADGET_DEBUG)     := -DDEBUG
-ccflags-$(CONFIG_USB_GADGET_VERBOSE)   += -DVERBOSE_DEBUG
+subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG)      := -DDEBUG
+subdir-ccflags-$(CONFIG_USB_GADGET_VERBOSE)    += -DVERBOSE_DEBUG
 
 obj-$(CONFIG_USB_GADGET)       += udc-core.o
 obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o
@@ -64,42 +64,4 @@ obj-$(CONFIG_USB_F_MASS_STORAGE)+= usb_f_mass_storage.o
 usb_f_fs-y                     := f_fs.o
 obj-$(CONFIG_USB_F_FS)         += usb_f_fs.o
 
-#
-# USB gadget drivers
-#
-g_zero-y                       := zero.o
-g_audio-y                      := audio.o
-g_ether-y                      := ether.o
-g_serial-y                     := serial.o
-g_midi-y                       := gmidi.o
-gadgetfs-y                     := inode.o
-g_mass_storage-y               := mass_storage.o
-g_printer-y                    := printer.o
-g_cdc-y                                := cdc2.o
-g_multi-y                      := multi.o
-g_hid-y                                := hid.o
-g_dbgp-y                       := dbgp.o
-g_nokia-y                      := nokia.o
-g_webcam-y                     := webcam.o
-g_ncm-y                                := ncm.o
-g_acm_ms-y                     := acm_ms.o
-g_tcm_usb_gadget-y             := tcm_usb_gadget.o
-
-obj-$(CONFIG_USB_ZERO)         += g_zero.o
-obj-$(CONFIG_USB_AUDIO)                += g_audio.o
-obj-$(CONFIG_USB_ETH)          += g_ether.o
-obj-$(CONFIG_USB_GADGETFS)     += gadgetfs.o
-obj-$(CONFIG_USB_FUNCTIONFS)   += g_ffs.o
-obj-$(CONFIG_USB_MASS_STORAGE) += g_mass_storage.o
-obj-$(CONFIG_USB_G_SERIAL)     += g_serial.o
-obj-$(CONFIG_USB_G_PRINTER)    += g_printer.o
-obj-$(CONFIG_USB_MIDI_GADGET)  += g_midi.o
-obj-$(CONFIG_USB_CDC_COMPOSITE) += g_cdc.o
-obj-$(CONFIG_USB_G_HID)                += g_hid.o
-obj-$(CONFIG_USB_G_DBGP)       += g_dbgp.o
-obj-$(CONFIG_USB_G_MULTI)      += g_multi.o
-obj-$(CONFIG_USB_G_NOKIA)      += g_nokia.o
-obj-$(CONFIG_USB_G_WEBCAM)     += g_webcam.o
-obj-$(CONFIG_USB_G_NCM)                += g_ncm.o
-obj-$(CONFIG_USB_G_ACM_MS)     += g_acm_ms.o
-obj-$(CONFIG_USB_GADGET_TARGET)        += tcm_usb_gadget.o
+obj-$(CONFIG_USB_GADGET)       += legacy/
diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig
new file mode 100644 (file)
index 0000000..aa376f0
--- /dev/null
@@ -0,0 +1,475 @@
+#
+# 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
+       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"
+       depends on SND
+       select USB_LIBCOMPOSITE
+       select SND_PCM
+       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
+       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
+       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
+       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
+       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
+       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
+       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".
diff --git a/drivers/usb/gadget/legacy/Makefile b/drivers/usb/gadget/legacy/Makefile
new file mode 100644 (file)
index 0000000..fbb32aa
--- /dev/null
@@ -0,0 +1,42 @@
+#
+# USB gadget drivers
+#
+
+ccflags-y                      := -I$(PWD)/drivers/usb/gadget/
+
+g_zero-y                       := zero.o
+g_audio-y                      := audio.o
+g_ether-y                      := ether.o
+g_serial-y                     := serial.o
+g_midi-y                       := gmidi.o
+gadgetfs-y                     := inode.o
+g_mass_storage-y               := mass_storage.o
+g_printer-y                    := printer.o
+g_cdc-y                                := cdc2.o
+g_multi-y                      := multi.o
+g_hid-y                                := hid.o
+g_dbgp-y                       := dbgp.o
+g_nokia-y                      := nokia.o
+g_webcam-y                     := webcam.o
+g_ncm-y                                := ncm.o
+g_acm_ms-y                     := acm_ms.o
+g_tcm_usb_gadget-y             := tcm_usb_gadget.o
+
+obj-$(CONFIG_USB_ZERO)         += g_zero.o
+obj-$(CONFIG_USB_AUDIO)                += g_audio.o
+obj-$(CONFIG_USB_ETH)          += g_ether.o
+obj-$(CONFIG_USB_GADGETFS)     += gadgetfs.o
+obj-$(CONFIG_USB_FUNCTIONFS)   += g_ffs.o
+obj-$(CONFIG_USB_MASS_STORAGE) += g_mass_storage.o
+obj-$(CONFIG_USB_G_SERIAL)     += g_serial.o
+obj-$(CONFIG_USB_G_PRINTER)    += g_printer.o
+obj-$(CONFIG_USB_MIDI_GADGET)  += g_midi.o
+obj-$(CONFIG_USB_CDC_COMPOSITE) += g_cdc.o
+obj-$(CONFIG_USB_G_HID)                += g_hid.o
+obj-$(CONFIG_USB_G_DBGP)       += g_dbgp.o
+obj-$(CONFIG_USB_G_MULTI)      += g_multi.o
+obj-$(CONFIG_USB_G_NOKIA)      += g_nokia.o
+obj-$(CONFIG_USB_G_WEBCAM)     += g_webcam.o
+obj-$(CONFIG_USB_G_NCM)                += g_ncm.o
+obj-$(CONFIG_USB_G_ACM_MS)     += g_acm_ms.o
+obj-$(CONFIG_USB_GADGET_TARGET)        += tcm_usb_gadget.o