]> rtime.felk.cvut.cz Git - linux-imx.git/blob - drivers/usb/gadget/Kconfig
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-imx.git] / drivers / usb / gadget / Kconfig
1 #
2 # USB Gadget support on a system involves
3 #    (a) a peripheral controller, and
4 #    (b) the gadget driver using it.
5 #
6 # NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
7 #
8 #  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
9 #  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
10 #  - Some systems have both kinds of controllers.
11 #
12 # With help from a special transceiver and a "Mini-AB" jack, systems with
13 # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
14 #
15
16 menuconfig USB_GADGET
17         tristate "USB Gadget Support"
18         select NLS
19         help
20            USB is a master/slave protocol, organized with one master
21            host (such as a PC) controlling up to 127 peripheral devices.
22            The USB hardware is asymmetric, which makes it easier to set up:
23            you can't connect a "to-the-host" connector to a peripheral.
24
25            Linux can run in the host, or in the peripheral.  In both cases
26            you need a low level bus controller driver, and some software
27            talking to it.  Peripheral controllers are often discrete silicon,
28            or are integrated with the CPU in a microcontroller.  The more
29            familiar host side controllers have names like "EHCI", "OHCI",
30            or "UHCI", and are usually integrated into southbridges on PC
31            motherboards.
32
33            Enable this configuration option if you want to run Linux inside
34            a USB peripheral device.  Configure one hardware driver for your
35            peripheral/device side bus controller, and a "gadget driver" for
36            your peripheral protocol.  (If you use modular gadget drivers,
37            you may configure more than one.)
38
39            If in doubt, say "N" and don't enable these drivers; most people
40            don't have this kind of hardware (except maybe inside Linux PDAs).
41
42            For more information, see <http://www.linux-usb.org/gadget> and
43            the kernel DocBook documentation for this API.
44
45 if USB_GADGET
46
47 config USB_GADGET_DEBUG
48         boolean "Debugging messages (DEVELOPMENT)"
49         depends on DEBUG_KERNEL
50         help
51            Many controller and gadget drivers will print some debugging
52            messages if you use this option to ask for those messages.
53
54            Avoid enabling these messages, even if you're actively
55            debugging such a driver.  Many drivers will emit so many
56            messages that the driver timings are affected, which will
57            either create new failure modes or remove the one you're
58            trying to track down.  Never enable these messages for a
59            production build.
60
61 config USB_GADGET_DEBUG_FILES
62         boolean "Debugging information files (DEVELOPMENT)"
63         depends on PROC_FS
64         help
65            Some of the drivers in the "gadget" framework can expose
66            debugging information in files such as /proc/driver/udc
67            (for a peripheral controller).  The information in these
68            files may help when you're troubleshooting or bringing up a
69            driver on a new board.   Enable these files by choosing "Y"
70            here.  If in doubt, or to conserve kernel memory, say "N".
71
72 config USB_GADGET_DEBUG_FS
73         boolean "Debugging information files in debugfs (DEVELOPMENT)"
74         depends on DEBUG_FS
75         help
76            Some of the drivers in the "gadget" framework can expose
77            debugging information in files under /sys/kernel/debug/.
78            The information in these files may help when you're
79            troubleshooting or bringing up a driver on a new board.
80            Enable these files by choosing "Y" here.  If in doubt, or
81            to conserve kernel memory, say "N".
82
83 config USB_GADGET_VBUS_DRAW
84         int "Maximum VBUS Power usage (2-500 mA)"
85         range 2 500
86         default 2
87         help
88            Some devices need to draw power from USB when they are
89            configured, perhaps to operate circuitry or to recharge
90            batteries.  This is in addition to any local power supply,
91            such as an AC adapter or batteries.
92
93            Enter the maximum power your device draws through USB, in
94            milliAmperes.  The permitted range of values is 2 - 500 mA;
95            0 mA would be legal, but can make some hosts misbehave.
96
97            This value will be used except for system-specific gadget
98            drivers that have more specific information.
99
100 config USB_GADGET_STORAGE_NUM_BUFFERS
101         int "Number of storage pipeline buffers"
102         range 2 4
103         default 2
104         help
105            Usually 2 buffers are enough to establish a good buffering
106            pipeline. The number may be increased in order to compensate
107            for a bursty VFS behaviour. For instance there may be CPU wake up
108            latencies that makes the VFS to appear bursty in a system with
109            an CPU on-demand governor. Especially if DMA is doing IO to
110            offload the CPU. In this case the CPU will go into power
111            save often and spin up occasionally to move data within VFS.
112            If selecting USB_GADGET_DEBUG_FILES this value may be set by
113            a module parameter as well.
114            If unsure, say 2.
115
116 #
117 # USB Peripheral Controller Support
118 #
119 # The order here is alphabetical, except that integrated controllers go
120 # before discrete ones so they will be the initial/default value:
121 #   - integrated/SOC controllers first
122 #   - licensed IP used in both SOC and discrete versions
123 #   - discrete ones (including all PCI-only controllers)
124 #   - debug/dummy gadget+hcd is last.
125 #
126 menu "USB Peripheral Controller"
127
128 #
129 # Integrated controllers
130 #
131
132 config USB_AT91
133         tristate "Atmel AT91 USB Device Port"
134         depends on ARCH_AT91
135         help
136            Many Atmel AT91 processors (such as the AT91RM2000) have a
137            full speed USB Device Port with support for five configurable
138            endpoints (plus endpoint zero).
139
140            Say "y" to link the driver statically, or "m" to build a
141            dynamically linked module called "at91_udc" and force all
142            gadget drivers to also be dynamically linked.
143
144 config USB_LPC32XX
145         tristate "LPC32XX USB Peripheral Controller"
146         depends on ARCH_LPC32XX
147         depends on USB_PHY
148         select USB_ISP1301
149         help
150            This option selects the USB device controller in the LPC32xx SoC.
151
152            Say "y" to link the driver statically, or "m" to build a
153            dynamically linked module called "lpc32xx_udc" and force all
154            gadget drivers to also be dynamically linked.
155
156 config USB_ATMEL_USBA
157         tristate "Atmel USBA"
158         depends on AVR32 || ARCH_AT91
159         help
160           USBA is the integrated high-speed USB Device controller on
161           the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
162
163 config USB_BCM63XX_UDC
164         tristate "Broadcom BCM63xx Peripheral Controller"
165         depends on BCM63XX
166         help
167            Many Broadcom BCM63xx chipsets (such as the BCM6328) have a
168            high speed USB Device Port with support for four fixed endpoints
169            (plus endpoint zero).
170
171            Say "y" to link the driver statically, or "m" to build a
172            dynamically linked module called "bcm63xx_udc".
173
174 config USB_FSL_USB2
175         tristate "Freescale Highspeed USB DR Peripheral Controller"
176         depends on FSL_SOC || ARCH_MXC
177         select USB_FSL_MPH_DR_OF if OF
178         help
179            Some of Freescale PowerPC and i.MX processors have a High Speed
180            Dual-Role(DR) USB controller, which supports device mode.
181
182            The number of programmable endpoints is different through
183            SOC revisions.
184
185            Say "y" to link the driver statically, or "m" to build a
186            dynamically linked module called "fsl_usb2_udc" and force
187            all gadget drivers to also be dynamically linked.
188
189 config USB_FUSB300
190         tristate "Faraday FUSB300 USB Peripheral Controller"
191         depends on !PHYS_ADDR_T_64BIT
192         help
193            Faraday usb device controller FUSB300 driver
194
195 config USB_FOTG210_UDC
196         depends on HAS_DMA
197         tristate "Faraday FOTG210 USB Peripheral Controller"
198         help
199            Faraday USB2.0 OTG controller which can be configured as
200            high speed or full speed USB device. This driver supppors
201            Bulk Transfer so far.
202
203            Say "y" to link the driver statically, or "m" to build a
204            dynamically linked module called "fotg210_udc".
205
206 config USB_OMAP
207         tristate "OMAP USB Device Controller"
208         depends on ARCH_OMAP1
209         depends on USB_PHY
210         select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG
211         help
212            Many Texas Instruments OMAP processors have flexible full
213            speed USB device controllers, with support for up to 30
214            endpoints (plus endpoint zero).  This driver supports the
215            controller in the OMAP 1611, and should work with controllers
216            in other OMAP processors too, given minor tweaks.
217
218            Say "y" to link the driver statically, or "m" to build a
219            dynamically linked module called "omap_udc" and force all
220            gadget drivers to also be dynamically linked.
221
222 config USB_PXA25X
223         tristate "PXA 25x or IXP 4xx"
224         depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
225         help
226            Intel's PXA 25x series XScale ARM-5TE processors include
227            an integrated full speed USB 1.1 device controller.  The
228            controller in the IXP 4xx series is register-compatible.
229
230            It has fifteen fixed-function endpoints, as well as endpoint
231            zero (for control transfers).
232
233            Say "y" to link the driver statically, or "m" to build a
234            dynamically linked module called "pxa25x_udc" and force all
235            gadget drivers to also be dynamically linked.
236
237 # if there's only one gadget driver, using only two bulk endpoints,
238 # don't waste memory for the other endpoints
239 config USB_PXA25X_SMALL
240         depends on USB_PXA25X
241         bool
242         default n if USB_ETH_RNDIS
243         default y if USB_ZERO
244         default y if USB_ETH
245         default y if USB_G_SERIAL
246
247 config USB_R8A66597
248         tristate "Renesas R8A66597 USB Peripheral Controller"
249         help
250            R8A66597 is a discrete USB host and peripheral controller chip that
251            supports both full and high speed USB 2.0 data transfers.
252            It has nine configurable endpoints, and endpoint zero.
253
254            Say "y" to link the driver statically, or "m" to build a
255            dynamically linked module called "r8a66597_udc" and force all
256            gadget drivers to also be dynamically linked.
257
258 config USB_RENESAS_USBHS_UDC
259         tristate 'Renesas USBHS controller'
260         depends on USB_RENESAS_USBHS
261         help
262            Renesas USBHS is a discrete USB host and peripheral controller chip
263            that supports both full and high speed USB 2.0 data transfers.
264            It has nine or more configurable endpoints, and endpoint zero.
265
266            Say "y" to link the driver statically, or "m" to build a
267            dynamically linked module called "renesas_usbhs" and force all
268            gadget drivers to also be dynamically linked.
269
270 config USB_PXA27X
271         tristate "PXA 27x"
272         help
273            Intel's PXA 27x series XScale ARM v5TE processors include
274            an integrated full speed USB 1.1 device controller.
275
276            It has up to 23 endpoints, as well as endpoint zero (for
277            control transfers).
278
279            Say "y" to link the driver statically, or "m" to build a
280            dynamically linked module called "pxa27x_udc" and force all
281            gadget drivers to also be dynamically linked.
282
283 config USB_S3C_HSOTG
284         tristate "S3C HS/OtG USB Device controller"
285         depends on S3C_DEV_USB_HSOTG
286         help
287           The Samsung S3C64XX USB2.0 high-speed gadget controller
288           integrated into the S3C64XX series SoC.
289
290 config USB_IMX
291         tristate "Freescale i.MX1 USB Peripheral Controller"
292         depends on ARCH_MXC
293         depends on BROKEN
294         help
295            Freescale's i.MX1 includes an integrated full speed
296            USB 1.1 device controller.
297
298            It has Six fixed-function endpoints, as well as endpoint
299            zero (for control transfers).
300
301            Say "y" to link the driver statically, or "m" to build a
302            dynamically linked module called "imx_udc" and force all
303            gadget drivers to also be dynamically linked.
304
305 config USB_S3C2410
306         tristate "S3C2410 USB Device Controller"
307         depends on ARCH_S3C24XX
308         help
309           Samsung's S3C2410 is an ARM-4 processor with an integrated
310           full speed USB 1.1 device controller.  It has 4 configurable
311           endpoints, as well as endpoint zero (for control transfers).
312
313           This driver has been tested on the S3C2410, S3C2412, and
314           S3C2440 processors.
315
316 config USB_S3C2410_DEBUG
317         boolean "S3C2410 udc debug messages"
318         depends on USB_S3C2410
319
320 config USB_S3C_HSUDC
321         tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
322         depends on ARCH_S3C24XX
323         help
324           Samsung's S3C2416, S3C2443 and S3C2450 is an ARM9 based SoC
325           integrated with dual speed USB 2.0 device controller. It has
326           8 endpoints, as well as endpoint zero.
327
328           This driver has been tested on S3C2416 and S3C2450 processors.
329
330 config USB_MV_UDC
331         tristate "Marvell USB2.0 Device Controller"
332         depends on GENERIC_HARDIRQS && HAS_DMA
333         help
334           Marvell Socs (including PXA and MMP series) include a high speed
335           USB2.0 OTG controller, which can be configured as high speed or
336           full speed USB peripheral.
337
338 config USB_MV_U3D
339         depends on HAS_DMA
340         tristate "MARVELL PXA2128 USB 3.0 controller"
341         help
342           MARVELL PXA2128 Processor series include a super speed USB3.0 device
343           controller, which support super speed USB peripheral.
344
345 #
346 # Controllers available in both integrated and discrete versions
347 #
348
349 config USB_M66592
350         tristate "Renesas M66592 USB Peripheral Controller"
351         help
352            M66592 is a discrete USB peripheral controller chip that
353            supports both full and high speed USB 2.0 data transfers.
354            It has seven configurable endpoints, and endpoint zero.
355
356            Say "y" to link the driver statically, or "m" to build a
357            dynamically linked module called "m66592_udc" and force all
358            gadget drivers to also be dynamically linked.
359
360 #
361 # Controllers available only in discrete form (and all PCI controllers)
362 #
363
364 config USB_AMD5536UDC
365         tristate "AMD5536 UDC"
366         depends on PCI
367         help
368            The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
369            It is a USB Highspeed DMA capable USB device controller. Beside ep0
370            it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
371            The UDC port supports OTG operation, and may be used as a host port
372            if it's not being used to implement peripheral or OTG roles.
373
374            Say "y" to link the driver statically, or "m" to build a
375            dynamically linked module called "amd5536udc" and force all
376            gadget drivers to also be dynamically linked.
377
378 config USB_FSL_QE
379         tristate "Freescale QE/CPM USB Device Controller"
380         depends on FSL_SOC && (QUICC_ENGINE || CPM)
381         help
382            Some of Freescale PowerPC processors have a Full Speed
383            QE/CPM2 USB controller, which support device mode with 4
384            programmable endpoints. This driver supports the
385            controller in the MPC8360 and MPC8272, and should work with
386            controllers having QE or CPM2, given minor tweaks.
387
388            Set CONFIG_USB_GADGET to "m" to build this driver as a
389            dynamically linked module called "fsl_qe_udc".
390
391 config USB_NET2272
392         tristate "PLX NET2272"
393         help
394           PLX NET2272 is a USB peripheral controller which supports
395           both full and high speed USB 2.0 data transfers.
396
397           It has three configurable endpoints, as well as endpoint zero
398           (for control transfer).
399           Say "y" to link the driver statically, or "m" to build a
400           dynamically linked module called "net2272" and force all
401           gadget drivers to also be dynamically linked.
402
403 config USB_NET2272_DMA
404         boolean "Support external DMA controller"
405         depends on USB_NET2272
406         help
407           The NET2272 part can optionally support an external DMA
408           controller, but your board has to have support in the
409           driver itself.
410
411           If unsure, say "N" here.  The driver works fine in PIO mode.
412
413 config USB_NET2280
414         tristate "NetChip 228x"
415         depends on PCI
416         help
417            NetChip 2280 / 2282 is a PCI based USB peripheral controller which
418            supports both full and high speed USB 2.0 data transfers.
419
420            It has six configurable endpoints, as well as endpoint zero
421            (for control transfers) and several endpoints with dedicated
422            functions.
423
424            Say "y" to link the driver statically, or "m" to build a
425            dynamically linked module called "net2280" and force all
426            gadget drivers to also be dynamically linked.
427
428 config USB_GOKU
429         tristate "Toshiba TC86C001 'Goku-S'"
430         depends on PCI
431         help
432            The Toshiba TC86C001 is a PCI device which includes controllers
433            for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
434
435            The device controller has three configurable (bulk or interrupt)
436            endpoints, plus endpoint zero (for control transfers).
437
438            Say "y" to link the driver statically, or "m" to build a
439            dynamically linked module called "goku_udc" and to force all
440            gadget drivers to also be dynamically linked.
441
442 config USB_EG20T
443         tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
444         depends on PCI && GENERIC_HARDIRQS
445         help
446           This is a USB device driver for EG20T PCH.
447           EG20T PCH is the platform controller hub that is used in Intel's
448           general embedded platform. EG20T PCH has USB device interface.
449           Using this interface, it is able to access system devices connected
450           to USB device.
451           This driver enables USB device function.
452           USB device is a USB peripheral controller which
453           supports both full and high speed USB 2.0 data transfers.
454           This driver supports both control transfer and bulk transfer modes.
455           This driver dose not support interrupt transfer or isochronous
456           transfer modes.
457
458           This driver also can be used for LAPIS Semiconductor's ML7213 which is
459           for IVI(In-Vehicle Infotainment) use.
460           ML7831 is for general purpose use.
461           ML7213/ML7831 is companion chip for Intel Atom E6xx series.
462           ML7213/ML7831 is completely compatible for Intel EG20T PCH.
463
464 #
465 # LAST -- dummy/emulated controller
466 #
467
468 config USB_DUMMY_HCD
469         tristate "Dummy HCD (DEVELOPMENT)"
470         depends on USB=y || (USB=m && USB_GADGET=m)
471         help
472           This host controller driver emulates USB, looping all data transfer
473           requests back to a USB "gadget driver" in the same host.  The host
474           side is the master; the gadget side is the slave.  Gadget drivers
475           can be high, full, or low speed; and they have access to endpoints
476           like those from NET2280, PXA2xx, or SA1100 hardware.
477
478           This may help in some stages of creating a driver to embed in a
479           Linux device, since it lets you debug several parts of the gadget
480           driver without its hardware or drivers being involved.
481
482           Since such a gadget side driver needs to interoperate with a host
483           side Linux-USB device driver, this may help to debug both sides
484           of a USB protocol stack.
485
486           Say "y" to link the driver statically, or "m" to build a
487           dynamically linked module called "dummy_hcd" and force all
488           gadget drivers to also be dynamically linked.
489
490 # NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
491 # first and will be selected by default.
492
493 endmenu
494
495 #
496 # USB Gadget Drivers
497 #
498
499 # composite based drivers
500 config USB_LIBCOMPOSITE
501         tristate
502         select CONFIGFS_FS
503         depends on USB_GADGET
504
505 config USB_F_ACM
506         tristate
507
508 config USB_F_SS_LB
509         tristate
510
511 config USB_U_SERIAL
512         tristate
513
514 config USB_U_ETHER
515         tristate
516
517 config USB_U_RNDIS
518         tristate
519
520 config USB_F_SERIAL
521         tristate
522
523 config USB_F_OBEX
524         tristate
525
526 config USB_F_NCM
527         tristate
528
529 config USB_F_ECM
530         tristate
531
532 config USB_F_PHONET
533         tristate
534
535 config USB_F_EEM
536         tristate
537
538 config USB_F_SUBSET
539         tristate
540
541 config USB_F_RNDIS
542         tristate
543
544 choice
545         tristate "USB Gadget Drivers"
546         default USB_ETH
547         help
548           A Linux "Gadget Driver" talks to the USB Peripheral Controller
549           driver through the abstract "gadget" API.  Some other operating
550           systems call these "client" drivers, of which "class drivers"
551           are a subset (implementing a USB device class specification).
552           A gadget driver implements one or more USB functions using
553           the peripheral hardware.
554
555           Gadget drivers are hardware-neutral, or "platform independent",
556           except that they sometimes must understand quirks or limitations
557           of the particular controllers they work with.  For example, when
558           a controller doesn't support alternate configurations or provide
559           enough of the right types of endpoints, the gadget driver might
560           not be able work with that controller, or might need to implement
561           a less common variant of a device class protocol.
562
563 # this first set of drivers all depend on bulk-capable hardware.
564
565 config USB_CONFIGFS
566         tristate "USB functions configurable through configfs"
567         select USB_LIBCOMPOSITE
568         help
569           A Linux USB "gadget" can be set up through configfs.
570           If this is the case, the USB functions (which from the host's
571           perspective are seen as interfaces) and configurations are
572           specified simply by creating appropriate directories in configfs.
573           Associating functions with configurations is done by creating
574           appropriate symbolic links.
575           For more information see Documentation/usb/gadget-configfs.txt.
576
577 config USB_CONFIGFS_SERIAL
578         boolean "Generic serial bulk in/out"
579         depends on USB_CONFIGFS
580         depends on TTY
581         select USB_U_SERIAL
582         select USB_F_SERIAL
583         help
584           The function talks to the Linux-USB generic serial driver.
585
586 config USB_CONFIGFS_ACM
587         boolean "Abstract Control Model (CDC ACM)"
588         depends on USB_CONFIGFS
589         depends on TTY
590         select USB_U_SERIAL
591         select USB_F_ACM
592         help
593           ACM serial link.  This function can be used to interoperate with
594           MS-Windows hosts or with the Linux-USB "cdc-acm" driver.
595
596 config USB_CONFIGFS_OBEX
597         boolean "Object Exchange Model (CDC OBEX)"
598         depends on USB_CONFIGFS
599         depends on TTY
600         select USB_U_SERIAL
601         select USB_F_OBEX
602         help
603           You will need a user space OBEX server talking to /dev/ttyGS*,
604           since the kernel itself doesn't implement the OBEX protocol.
605
606 config USB_CONFIGFS_NCM
607         boolean "Network Control Model (CDC NCM)"
608         depends on USB_CONFIGFS
609         depends on NET
610         select USB_U_ETHER
611         select USB_F_NCM
612         help
613           NCM is an advanced protocol for Ethernet encapsulation, allows
614           grouping of several ethernet frames into one USB transfer and
615           different alignment possibilities.
616
617 config USB_CONFIGFS_ECM
618         boolean "Ethernet Control Model (CDC ECM)"
619         depends on USB_CONFIGFS
620         depends on NET
621         select USB_U_ETHER
622         select USB_F_ECM
623         help
624           The "Communication Device Class" (CDC) Ethernet Control Model.
625           That protocol is often avoided with pure Ethernet adapters, in
626           favor of simpler vendor-specific hardware, but is widely
627           supported by firmware for smart network devices.
628
629 config USB_CONFIGFS_ECM_SUBSET
630         boolean "Ethernet Control Model (CDC ECM) subset"
631         depends on USB_CONFIGFS
632         depends on NET
633         select USB_U_ETHER
634         select USB_F_SUBSET
635         help
636           On hardware that can't implement the full protocol,
637           a simple CDC subset is used, placing fewer demands on USB.
638
639 config USB_CONFIGFS_RNDIS
640         bool "RNDIS"
641         depends on USB_CONFIGFS
642         depends on NET
643         select USB_U_ETHER
644         select USB_U_RNDIS
645         select USB_F_RNDIS
646         help
647            Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
648            and Microsoft provides redistributable binary RNDIS drivers for
649            older versions of Windows.
650
651            To make MS-Windows work with this, use Documentation/usb/linux.inf
652            as the "driver info file".  For versions of MS-Windows older than
653            XP, you'll need to download drivers from Microsoft's website; a URL
654            is given in comments found in that info file.
655
656 config USB_CONFIGFS_EEM
657         bool "Ethernet Emulation Model (EEM)"
658         depends on USB_CONFIGFS
659         depends on NET
660         select USB_U_ETHER
661         select USB_F_EEM
662         help
663           CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
664           and therefore can be supported by more hardware.  Technically ECM and
665           EEM are designed for different applications.  The ECM model extends
666           the network interface to the target (e.g. a USB cable modem), and the
667           EEM model is for mobile devices to communicate with hosts using
668           ethernet over USB.  For Linux gadgets, however, the interface with
669           the host is the same (a usbX device), so the differences are minimal.
670
671 config USB_CONFIGFS_PHONET
672         boolean "Phonet protocol"
673         depends on USB_CONFIGFS
674         depends on NET
675         depends on PHONET
676         select USB_U_ETHER
677         select USB_F_PHONET
678         help
679           The Phonet protocol implementation for USB device.
680
681 config USB_ZERO
682         tristate "Gadget Zero (DEVELOPMENT)"
683         select USB_LIBCOMPOSITE
684         select USB_F_SS_LB
685         help
686           Gadget Zero is a two-configuration device.  It either sinks and
687           sources bulk data; or it loops back a configurable number of
688           transfers.  It also implements control requests, for "chapter 9"
689           conformance.  The driver needs only two bulk-capable endpoints, so
690           it can work on top of most device-side usb controllers.  It's
691           useful for testing, and is also a working example showing how
692           USB "gadget drivers" can be written.
693
694           Make this be the first driver you try using on top of any new
695           USB peripheral controller driver.  Then you can use host-side
696           test software, like the "usbtest" driver, to put your hardware
697           and its driver through a basic set of functional tests.
698
699           Gadget Zero also works with the host-side "usb-skeleton" driver,
700           and with many kinds of host-side test software.  You may need
701           to tweak product and vendor IDs before host software knows about
702           this device, and arrange to select an appropriate configuration.
703
704           Say "y" to link the driver statically, or "m" to build a
705           dynamically linked module called "g_zero".
706
707 config USB_ZERO_HNPTEST
708         boolean "HNP Test Device"
709         depends on USB_ZERO && USB_OTG
710         help
711           You can configure this device to enumerate using the device
712           identifiers of the USB-OTG test device.  That means that when
713           this gadget connects to another OTG device, with this one using
714           the "B-Peripheral" role, that device will use HNP to let this
715           one serve as the USB host instead (in the "B-Host" role).
716
717 config USB_AUDIO
718         tristate "Audio Gadget"
719         depends on SND
720         select USB_LIBCOMPOSITE
721         select SND_PCM
722         help
723           This Gadget Audio driver is compatible with USB Audio Class
724           specification 2.0. It implements 1 AudioControl interface,
725           1 AudioStreaming Interface each for USB-OUT and USB-IN.
726           Number of channels, sample rate and sample size can be
727           specified as module parameters.
728           This driver doesn't expect any real Audio codec to be present
729           on the device - the audio streams are simply sinked to and
730           sourced from a virtual ALSA sound card created. The user-space
731           application may choose to do whatever it wants with the data
732           received from the USB Host and choose to provide whatever it
733           wants as audio data to the USB Host.
734
735           Say "y" to link the driver statically, or "m" to build a
736           dynamically linked module called "g_audio".
737
738 config GADGET_UAC1
739         bool "UAC 1.0 (Legacy)"
740         depends on USB_AUDIO
741         help
742           If you instead want older UAC Spec-1.0 driver that also has audio
743           paths hardwired to the Audio codec chip on-board and doesn't work
744           without one.
745
746 config USB_ETH
747         tristate "Ethernet Gadget (with CDC Ethernet support)"
748         depends on NET
749         select USB_LIBCOMPOSITE
750         select USB_U_ETHER
751         select USB_U_RNDIS
752         select USB_F_ECM
753         select USB_F_SUBSET
754         select CRC32
755         help
756           This driver implements Ethernet style communication, in one of
757           several ways:
758           
759            - The "Communication Device Class" (CDC) Ethernet Control Model.
760              That protocol is often avoided with pure Ethernet adapters, in
761              favor of simpler vendor-specific hardware, but is widely
762              supported by firmware for smart network devices.
763
764            - On hardware can't implement that protocol, a simple CDC subset
765              is used, placing fewer demands on USB.
766
767            - CDC Ethernet Emulation Model (EEM) is a newer standard that has
768              a simpler interface that can be used by more USB hardware.
769
770           RNDIS support is an additional option, more demanding than than
771           subset.
772
773           Within the USB device, this gadget driver exposes a network device
774           "usbX", where X depends on what other networking devices you have.
775           Treat it like a two-node Ethernet link:  host, and gadget.
776
777           The Linux-USB host-side "usbnet" driver interoperates with this
778           driver, so that deep I/O queues can be supported.  On 2.4 kernels,
779           use "CDCEther" instead, if you're using the CDC option. That CDC
780           mode should also interoperate with standard CDC Ethernet class
781           drivers on other host operating systems.
782
783           Say "y" to link the driver statically, or "m" to build a
784           dynamically linked module called "g_ether".
785
786 config USB_ETH_RNDIS
787         bool "RNDIS support"
788         depends on USB_ETH
789         select USB_LIBCOMPOSITE
790         select USB_F_RNDIS
791         default y
792         help
793            Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
794            and Microsoft provides redistributable binary RNDIS drivers for
795            older versions of Windows.
796
797            If you say "y" here, the Ethernet gadget driver will try to provide
798            a second device configuration, supporting RNDIS to talk to such
799            Microsoft USB hosts.
800            
801            To make MS-Windows work with this, use Documentation/usb/linux.inf
802            as the "driver info file".  For versions of MS-Windows older than
803            XP, you'll need to download drivers from Microsoft's website; a URL
804            is given in comments found in that info file.
805
806 config USB_ETH_EEM
807        bool "Ethernet Emulation Model (EEM) support"
808        depends on USB_ETH
809         select USB_LIBCOMPOSITE
810         select USB_F_EEM
811        default n
812        help
813          CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
814          and therefore can be supported by more hardware.  Technically ECM and
815          EEM are designed for different applications.  The ECM model extends
816          the network interface to the target (e.g. a USB cable modem), and the
817          EEM model is for mobile devices to communicate with hosts using
818          ethernet over USB.  For Linux gadgets, however, the interface with
819          the host is the same (a usbX device), so the differences are minimal.
820
821          If you say "y" here, the Ethernet gadget driver will use the EEM
822          protocol rather than ECM.  If unsure, say "n".
823
824 config USB_G_NCM
825         tristate "Network Control Model (NCM) support"
826         depends on NET
827         select USB_LIBCOMPOSITE
828         select USB_U_ETHER
829         select USB_F_NCM
830         select CRC32
831         help
832           This driver implements USB CDC NCM subclass standard. NCM is
833           an advanced protocol for Ethernet encapsulation, allows grouping
834           of several ethernet frames into one USB transfer and different
835           alignment possibilities.
836
837           Say "y" to link the driver statically, or "m" to build a
838           dynamically linked module called "g_ncm".
839
840 config USB_GADGETFS
841         tristate "Gadget Filesystem"
842         help
843           This driver provides a filesystem based API that lets user mode
844           programs implement a single-configuration USB device, including
845           endpoint I/O and control requests that don't relate to enumeration.
846           All endpoints, transfer speeds, and transfer types supported by
847           the hardware are available, through read() and write() calls.
848
849           Say "y" to link the driver statically, or "m" to build a
850           dynamically linked module called "gadgetfs".
851
852 config USB_FUNCTIONFS
853         tristate "Function Filesystem"
854         select USB_LIBCOMPOSITE
855         select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
856         help
857           The Function Filesystem (FunctionFS) lets one create USB
858           composite functions in user space in the same way GadgetFS
859           lets one create USB gadgets in user space.  This allows creation
860           of composite gadgets such that some of the functions are
861           implemented in kernel space (for instance Ethernet, serial or
862           mass storage) and other are implemented in user space.
863
864           If you say "y" or "m" here you will be able what kind of
865           configurations the gadget will provide.
866
867           Say "y" to link the driver statically, or "m" to build
868           a dynamically linked module called "g_ffs".
869
870 config USB_FUNCTIONFS_ETH
871         bool "Include configuration with CDC ECM (Ethernet)"
872         depends on USB_FUNCTIONFS && NET
873         select USB_U_ETHER
874         help
875           Include a configuration with CDC ECM function (Ethernet) and the
876           Function Filesystem.
877
878 config USB_FUNCTIONFS_RNDIS
879         bool "Include configuration with RNDIS (Ethernet)"
880         depends on USB_FUNCTIONFS && NET
881         select USB_U_ETHER
882         select USB_U_RNDIS
883         help
884           Include a configuration with RNDIS function (Ethernet) and the Filesystem.
885
886 config USB_FUNCTIONFS_GENERIC
887         bool "Include 'pure' configuration"
888         depends on USB_FUNCTIONFS
889         help
890           Include a configuration with the Function Filesystem alone with
891           no Ethernet interface.
892
893 config USB_MASS_STORAGE
894         tristate "Mass Storage Gadget"
895         depends on BLOCK
896         select USB_LIBCOMPOSITE
897         help
898           The Mass Storage Gadget acts as a USB Mass Storage disk drive.
899           As its storage repository it can use a regular file or a block
900           device (in much the same way as the "loop" device driver),
901           specified as a module parameter or sysfs option.
902
903           This driver is a replacement for now removed File-backed
904           Storage Gadget (g_file_storage).
905
906           Say "y" to link the driver statically, or "m" to build
907           a dynamically linked module called "g_mass_storage".
908
909 config USB_GADGET_TARGET
910         tristate "USB Gadget Target Fabric Module"
911         depends on TARGET_CORE
912         select USB_LIBCOMPOSITE
913         help
914           This fabric is an USB gadget. Two USB protocols are supported that is
915           BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is
916           advertised on alternative interface 0 (primary) and UAS is on
917           alternative interface 1. Both protocols can work on USB2.0 and USB3.0.
918           UAS utilizes the USB 3.0 feature called streams support.
919
920 config USB_G_SERIAL
921         tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
922         depends on TTY
923         select USB_U_SERIAL
924         select USB_F_ACM
925         select USB_F_SERIAL
926         select USB_F_OBEX
927         select USB_LIBCOMPOSITE
928         help
929           The Serial Gadget talks to the Linux-USB generic serial driver.
930           This driver supports a CDC-ACM module option, which can be used
931           to interoperate with MS-Windows hosts or with the Linux-USB
932           "cdc-acm" driver.
933
934           This driver also supports a CDC-OBEX option.  You will need a
935           user space OBEX server talking to /dev/ttyGS*, since the kernel
936           itself doesn't implement the OBEX protocol.
937
938           Say "y" to link the driver statically, or "m" to build a
939           dynamically linked module called "g_serial".
940
941           For more information, see Documentation/usb/gadget_serial.txt
942           which includes instructions and a "driver info file" needed to
943           make MS-Windows work with CDC ACM.
944
945 config USB_MIDI_GADGET
946         tristate "MIDI Gadget"
947         depends on SND
948         select USB_LIBCOMPOSITE
949         select SND_RAWMIDI
950         help
951           The MIDI Gadget acts as a USB Audio device, with one MIDI
952           input and one MIDI output. These MIDI jacks appear as
953           a sound "card" in the ALSA sound system. Other MIDI
954           connections can then be made on the gadget system, using
955           ALSA's aconnect utility etc.
956
957           Say "y" to link the driver statically, or "m" to build a
958           dynamically linked module called "g_midi".
959
960 config USB_G_PRINTER
961         tristate "Printer Gadget"
962         select USB_LIBCOMPOSITE
963         help
964           The Printer Gadget channels data between the USB host and a
965           userspace program driving the print engine. The user space
966           program reads and writes the device file /dev/g_printer to
967           receive or send printer data. It can use ioctl calls to
968           the device file to get or set printer status.
969
970           Say "y" to link the driver statically, or "m" to build a
971           dynamically linked module called "g_printer".
972
973           For more information, see Documentation/usb/gadget_printer.txt
974           which includes sample code for accessing the device file.
975
976 if TTY
977
978 config USB_CDC_COMPOSITE
979         tristate "CDC Composite Device (Ethernet and ACM)"
980         depends on NET
981         select USB_LIBCOMPOSITE
982         select USB_U_SERIAL
983         select USB_U_ETHER
984         select USB_F_ACM
985         select USB_F_ECM
986         help
987           This driver provides two functions in one configuration:
988           a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
989
990           This driver requires four bulk and two interrupt endpoints,
991           plus the ability to handle altsettings.  Not all peripheral
992           controllers are that capable.
993
994           Say "y" to link the driver statically, or "m" to build a
995           dynamically linked module.
996
997 config USB_G_NOKIA
998         tristate "Nokia composite gadget"
999         depends on PHONET
1000         select USB_LIBCOMPOSITE
1001         select USB_U_SERIAL
1002         select USB_U_ETHER
1003         select USB_F_ACM
1004         select USB_F_OBEX
1005         select USB_F_PHONET
1006         select USB_F_ECM
1007         help
1008           The Nokia composite gadget provides support for acm, obex
1009           and phonet in only one composite gadget driver.
1010
1011           It's only really useful for N900 hardware. If you're building
1012           a kernel for N900, say Y or M here. If unsure, say N.
1013
1014 config USB_G_ACM_MS
1015         tristate "CDC Composite Device (ACM and mass storage)"
1016         depends on BLOCK
1017         select USB_LIBCOMPOSITE
1018         select USB_U_SERIAL
1019         select USB_F_ACM
1020         help
1021           This driver provides two functions in one configuration:
1022           a mass storage, and a CDC ACM (serial port) link.
1023
1024           Say "y" to link the driver statically, or "m" to build a
1025           dynamically linked module called "g_acm_ms".
1026
1027 config USB_G_MULTI
1028         tristate "Multifunction Composite Gadget"
1029         depends on BLOCK && NET
1030         select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
1031         select USB_LIBCOMPOSITE
1032         select USB_U_SERIAL
1033         select USB_U_ETHER
1034         select USB_U_RNDIS
1035         select USB_F_ACM
1036         help
1037           The Multifunction Composite Gadget provides Ethernet (RNDIS
1038           and/or CDC Ethernet), mass storage and ACM serial link
1039           interfaces.
1040
1041           You will be asked to choose which of the two configurations is
1042           to be available in the gadget.  At least one configuration must
1043           be chosen to make the gadget usable.  Selecting more than one
1044           configuration will prevent Windows from automatically detecting
1045           the gadget as a composite gadget, so an INF file will be needed to
1046           use the gadget.
1047
1048           Say "y" to link the driver statically, or "m" to build a
1049           dynamically linked module called "g_multi".
1050
1051 config USB_G_MULTI_RNDIS
1052         bool "RNDIS + CDC Serial + Storage configuration"
1053         depends on USB_G_MULTI
1054         default y
1055         help
1056           This option enables a configuration with RNDIS, CDC Serial and
1057           Mass Storage functions available in the Multifunction Composite
1058           Gadget.  This is the configuration dedicated for Windows since RNDIS
1059           is Microsoft's protocol.
1060
1061           If unsure, say "y".
1062
1063 config USB_G_MULTI_CDC
1064         bool "CDC Ethernet + CDC Serial + Storage configuration"
1065         depends on USB_G_MULTI
1066         default n
1067         help
1068           This option enables a configuration with CDC Ethernet (ECM), CDC
1069           Serial and Mass Storage functions available in the Multifunction
1070           Composite Gadget.
1071
1072           If unsure, say "y".
1073
1074 endif # TTY
1075
1076 config USB_G_HID
1077         tristate "HID Gadget"
1078         select USB_LIBCOMPOSITE
1079         help
1080           The HID gadget driver provides generic emulation of USB
1081           Human Interface Devices (HID).
1082
1083           For more information, see Documentation/usb/gadget_hid.txt which
1084           includes sample code for accessing the device files.
1085
1086           Say "y" to link the driver statically, or "m" to build a
1087           dynamically linked module called "g_hid".
1088
1089 # Standalone / single function gadgets
1090 config USB_G_DBGP
1091         tristate "EHCI Debug Device Gadget"
1092         depends on TTY
1093         select USB_LIBCOMPOSITE
1094         help
1095           This gadget emulates an EHCI Debug device. This is useful when you want
1096           to interact with an EHCI Debug Port.
1097
1098           Say "y" to link the driver statically, or "m" to build a
1099           dynamically linked module called "g_dbgp".
1100
1101 if USB_G_DBGP
1102 choice
1103         prompt "EHCI Debug Device mode"
1104         default USB_G_DBGP_SERIAL
1105
1106 config USB_G_DBGP_PRINTK
1107         depends on USB_G_DBGP
1108         bool "printk"
1109         help
1110           Directly printk() received data. No interaction.
1111
1112 config USB_G_DBGP_SERIAL
1113         depends on USB_G_DBGP
1114         select USB_U_SERIAL
1115         bool "serial"
1116         help
1117           Userland can interact using /dev/ttyGSxxx.
1118 endchoice
1119 endif
1120
1121 # put drivers that need isochronous transfer support (for audio
1122 # or video class gadget drivers), or specific hardware, here.
1123 config USB_G_WEBCAM
1124         tristate "USB Webcam Gadget"
1125         depends on VIDEO_DEV
1126         select USB_LIBCOMPOSITE
1127         select VIDEOBUF2_VMALLOC
1128         help
1129           The Webcam Gadget acts as a composite USB Audio and Video Class
1130           device. It provides a userspace API to process UVC control requests
1131           and stream video data to the host.
1132
1133           Say "y" to link the driver statically, or "m" to build a
1134           dynamically linked module called "g_webcam".
1135
1136 endchoice
1137
1138 endif # USB_GADGET