123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- #
- # 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"
- select NLS
- 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
- bool "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_VERBOSE
- bool "Verbose debugging Messages (DEVELOPMENT)"
- depends on USB_GADGET_DEBUG
- help
- Many controller and gadget drivers will print verbose 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
- bool "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
- bool "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.
- config USB_GADGET_STORAGE_NUM_BUFFERS
- int "Number of storage pipeline buffers"
- range 2 32
- default 2
- help
- Usually 2 buffers are enough to establish a good buffering
- pipeline. The number may be increased in order to compensate
- for a bursty VFS behaviour. For instance there may be CPU wake up
- latencies that makes the VFS to appear bursty in a system with
- an CPU on-demand governor. Especially if DMA is doing IO to
- offload the CPU. In this case the CPU will go into power
- save often and spin up occasionally to move data within VFS.
- If selecting USB_GADGET_DEBUG_FILES this value may be set by
- a module parameter as well.
- If unsure, say 2.
- source "drivers/usb/gadget/udc/Kconfig"
- #
- # USB Gadget Drivers
- #
- # composite based drivers
- config USB_LIBCOMPOSITE
- tristate
- select CONFIGFS_FS
- depends on USB_GADGET
- config USB_F_ACM
- tristate
- config USB_F_SS_LB
- tristate
- config USB_U_SERIAL
- tristate
- config USB_U_ETHER
- tristate
- config USB_F_SERIAL
- tristate
- config USB_F_OBEX
- tristate
- config USB_F_NCM
- tristate
- config USB_F_ECM
- tristate
- config USB_F_PHONET
- tristate
- config USB_F_EEM
- tristate
- config USB_F_SUBSET
- tristate
- config USB_F_RNDIS
- tristate
- config USB_F_MASS_STORAGE
- tristate
- config USB_F_FS
- tristate
- config USB_F_UAC1
- tristate
- config USB_F_UAC2
- tristate
- config USB_F_UVC
- tristate
- config USB_F_MIDI
- tristate
- config USB_F_HID
- tristate
- config USB_F_PRINTER
- tristate
- choice
- tristate "USB Gadget Drivers"
- 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_CONFIGFS
- tristate "USB functions configurable through configfs"
- select USB_LIBCOMPOSITE
- help
- A Linux USB "gadget" can be set up through configfs.
- If this is the case, the USB functions (which from the host's
- perspective are seen as interfaces) and configurations are
- specified simply by creating appropriate directories in configfs.
- Associating functions with configurations is done by creating
- appropriate symbolic links.
- For more information see Documentation/usb/gadget_configfs.txt.
- config USB_CONFIGFS_SERIAL
- bool "Generic serial bulk in/out"
- depends on USB_CONFIGFS
- depends on TTY
- select USB_U_SERIAL
- select USB_F_SERIAL
- help
- The function talks to the Linux-USB generic serial driver.
- config USB_CONFIGFS_ACM
- bool "Abstract Control Model (CDC ACM)"
- depends on USB_CONFIGFS
- depends on TTY
- select USB_U_SERIAL
- select USB_F_ACM
- help
- ACM serial link. This function can be used to interoperate with
- MS-Windows hosts or with the Linux-USB "cdc-acm" driver.
- config USB_CONFIGFS_OBEX
- bool "Object Exchange Model (CDC OBEX)"
- depends on USB_CONFIGFS
- depends on TTY
- select USB_U_SERIAL
- select USB_F_OBEX
- help
- You will need a user space OBEX server talking to /dev/ttyGS*,
- since the kernel itself doesn't implement the OBEX protocol.
- config USB_CONFIGFS_NCM
- bool "Network Control Model (CDC NCM)"
- depends on USB_CONFIGFS
- depends on NET
- select USB_U_ETHER
- select USB_F_NCM
- help
- NCM is an advanced protocol for Ethernet encapsulation, allows
- grouping of several ethernet frames into one USB transfer and
- different alignment possibilities.
- config USB_CONFIGFS_ECM
- bool "Ethernet Control Model (CDC ECM)"
- depends on USB_CONFIGFS
- depends on NET
- select USB_U_ETHER
- select USB_F_ECM
- help
- 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.
- config USB_CONFIGFS_ECM_SUBSET
- bool "Ethernet Control Model (CDC ECM) subset"
- depends on USB_CONFIGFS
- depends on NET
- select USB_U_ETHER
- select USB_F_SUBSET
- help
- On hardware that can't implement the full protocol,
- a simple CDC subset is used, placing fewer demands on USB.
- config USB_CONFIGFS_RNDIS
- bool "RNDIS"
- depends on USB_CONFIGFS
- depends on NET
- select USB_U_ETHER
- select USB_F_RNDIS
- help
- Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
- and Microsoft provides redistributable binary RNDIS drivers for
- older versions of Windows.
- 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_CONFIGFS_EEM
- bool "Ethernet Emulation Model (EEM)"
- depends on USB_CONFIGFS
- depends on NET
- select USB_U_ETHER
- select USB_F_EEM
- 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.
- config USB_CONFIGFS_PHONET
- bool "Phonet protocol"
- depends on USB_CONFIGFS
- depends on NET
- depends on PHONET
- select USB_U_ETHER
- select USB_F_PHONET
- help
- The Phonet protocol implementation for USB device.
- config USB_CONFIGFS_MASS_STORAGE
- bool "Mass storage"
- depends on USB_CONFIGFS
- depends on BLOCK
- 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.
- config USB_CONFIGFS_F_LB_SS
- bool "Loopback and sourcesink function (for testing)"
- depends on USB_CONFIGFS
- select USB_F_SS_LB
- help
- Loopback function loops back a configurable number of transfers.
- Sourcesink function either sinks and sources bulk data.
- It also implements control requests, for "chapter 9" conformance.
- 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.
- config USB_CONFIGFS_F_FS
- bool "Function filesystem (FunctionFS)"
- depends on USB_CONFIGFS
- select USB_F_FS
- 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.
- config USB_CONFIGFS_F_UAC1
- bool "Audio Class 1.0"
- depends on USB_CONFIGFS
- depends on SND
- select USB_LIBCOMPOSITE
- select SND_PCM
- select USB_F_UAC1
- help
- This Audio function implements 1 AudioControl interface,
- 1 AudioStreaming Interface each for USB-OUT and USB-IN.
- This driver requires a real Audio codec to be present
- on the device.
- config USB_CONFIGFS_F_UAC2
- bool "Audio Class 2.0"
- depends on USB_CONFIGFS
- depends on SND
- select USB_LIBCOMPOSITE
- select SND_PCM
- select USB_F_UAC2
- help
- This Audio function is compatible with USB Audio Class
- specification 2.0. It implements 1 AudioControl interface,
- 1 AudioStreaming Interface each for USB-OUT and USB-IN.
- 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.
- config USB_CONFIGFS_F_MIDI
- bool "MIDI function"
- depends on USB_CONFIGFS
- depends on SND
- select USB_LIBCOMPOSITE
- select SND_RAWMIDI
- select USB_F_MIDI
- help
- The MIDI Function 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.
- config USB_CONFIGFS_F_HID
- bool "HID function"
- depends on USB_CONFIGFS
- select USB_F_HID
- help
- The HID function driver provides generic emulation of USB
- Human Interface Devices (HID).
- For more information, see Documentation/usb/gadget_hid.txt.
- config USB_CONFIGFS_F_UVC
- bool "USB Webcam function"
- depends on USB_CONFIGFS
- depends on VIDEO_DEV
- select VIDEOBUF2_VMALLOC
- select USB_F_UVC
- help
- The Webcam function 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.
- config USB_CONFIGFS_F_PRINTER
- bool "Printer function"
- select USB_F_PRINTER
- depends on USB_CONFIGFS
- help
- The Printer function 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<X> to
- receive or send printer data. It can use ioctl calls to
- the device file to get or set printer status.
- For more information, see Documentation/usb/gadget_printer.txt
- which includes sample code for accessing the device file.
- source "drivers/usb/gadget/legacy/Kconfig"
- endchoice
- endif # USB_GADGET
|