Merge tag 'usb-5.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[linux-block.git] / drivers / usb / gadget / legacy / Kconfig
CommitLineData
cae8dc3b 1# SPDX-License-Identifier: GPL-2.0
8443f2d2
AP
2#
3# USB Gadget support on a system involves
4# (a) a peripheral controller, and
5# (b) the gadget driver using it.
6#
7# NOTE: Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
8#
9# - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
10# - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
11# - Some systems have both kinds of controllers.
12#
13# With help from a special transceiver and a "Mini-AB" jack, systems with
14# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
15#
df8df5e4
MY
16# A Linux "Gadget Driver" talks to the USB Peripheral Controller
17# driver through the abstract "gadget" API. Some other operating
18# systems call these "client" drivers, of which "class drivers"
19# are a subset (implementing a USB device class specification).
20# A gadget driver implements one or more USB functions using
21# the peripheral hardware.
22#
23# Gadget drivers are hardware-neutral, or "platform independent",
24# except that they sometimes must understand quirks or limitations
25# of the particular controllers they work with. For example, when
26# a controller doesn't support alternate configurations or provide
27# enough of the right types of endpoints, the gadget driver might
28# not be able work with that controller, or might need to implement
29# a less common variant of a device class protocol.
30#
31# The available choices each represent a single precomposed USB
32# gadget configuration. In the device model, each option contains
33# both the device instantiation as a child for a USB gadget
34# controller, and the relevant drivers for each function declared
35# by the device.
8443f2d2 36
df8df5e4 37menu "USB Gadget precomposed configurations"
10e5e6c2 38
8443f2d2
AP
39config USB_ZERO
40 tristate "Gadget Zero (DEVELOPMENT)"
41 select USB_LIBCOMPOSITE
42 select USB_F_SS_LB
43 help
44 Gadget Zero is a two-configuration device. It either sinks and
45 sources bulk data; or it loops back a configurable number of
46 transfers. It also implements control requests, for "chapter 9"
47 conformance. The driver needs only two bulk-capable endpoints, so
48 it can work on top of most device-side usb controllers. It's
49 useful for testing, and is also a working example showing how
50 USB "gadget drivers" can be written.
51
52 Make this be the first driver you try using on top of any new
53 USB peripheral controller driver. Then you can use host-side
54 test software, like the "usbtest" driver, to put your hardware
55 and its driver through a basic set of functional tests.
56
57 Gadget Zero also works with the host-side "usb-skeleton" driver,
58 and with many kinds of host-side test software. You may need
59 to tweak product and vendor IDs before host software knows about
60 this device, and arrange to select an appropriate configuration.
61
62 Say "y" to link the driver statically, or "m" to build a
63 dynamically linked module called "g_zero".
64
65config USB_ZERO_HNPTEST
6341e62b 66 bool "HNP Test Device"
8443f2d2
AP
67 depends on USB_ZERO && USB_OTG
68 help
69 You can configure this device to enumerate using the device
70 identifiers of the USB-OTG test device. That means that when
71 this gadget connects to another OTG device, with this one using
72 the "B-Peripheral" role, that device will use HNP to let this
73 one serve as the USB host instead (in the "B-Host" role).
74
75config USB_AUDIO
76 tristate "Audio Gadget"
77 depends on SND
78 select USB_LIBCOMPOSITE
79 select SND_PCM
0591bc23
RB
80 select USB_F_UAC1 if (GADGET_UAC1 && !GADGET_UAC1_LEGACY)
81 select USB_F_UAC1_LEGACY if (GADGET_UAC1 && GADGET_UAC1_LEGACY)
82 select USB_F_UAC2 if !GADGET_UAC1
83 select USB_U_AUDIO if (USB_F_UAC2 || USB_F_UAC1)
8443f2d2
AP
84 help
85 This Gadget Audio driver is compatible with USB Audio Class
86 specification 2.0. It implements 1 AudioControl interface,
87 1 AudioStreaming Interface each for USB-OUT and USB-IN.
88 Number of channels, sample rate and sample size can be
89 specified as module parameters.
90 This driver doesn't expect any real Audio codec to be present
91 on the device - the audio streams are simply sinked to and
92 sourced from a virtual ALSA sound card created. The user-space
93 application may choose to do whatever it wants with the data
94 received from the USB Host and choose to provide whatever it
95 wants as audio data to the USB Host.
96
97 Say "y" to link the driver statically, or "m" to build a
98 dynamically linked module called "g_audio".
99
0591bc23
RB
100config GADGET_UAC1
101 bool "UAC 1.0"
102 depends on USB_AUDIO
103 help
104 If you instead want older USB Audio Class specification 1.0 support
105 with similar driver capabilities.
106
d355339e 107config GADGET_UAC1_LEGACY
8443f2d2 108 bool "UAC 1.0 (Legacy)"
0591bc23 109 depends on GADGET_UAC1
8443f2d2 110 help
0591bc23 111 If you instead want legacy UAC Spec-1.0 driver that also has audio
8443f2d2
AP
112 paths hardwired to the Audio codec chip on-board and doesn't work
113 without one.
114
115config USB_ETH
116 tristate "Ethernet Gadget (with CDC Ethernet support)"
117 depends on NET
118 select USB_LIBCOMPOSITE
119 select USB_U_ETHER
120 select USB_F_ECM
121 select USB_F_SUBSET
122 select CRC32
123 help
124 This driver implements Ethernet style communication, in one of
125 several ways:
126
127 - The "Communication Device Class" (CDC) Ethernet Control Model.
128 That protocol is often avoided with pure Ethernet adapters, in
129 favor of simpler vendor-specific hardware, but is widely
130 supported by firmware for smart network devices.
131
132 - On hardware can't implement that protocol, a simple CDC subset
133 is used, placing fewer demands on USB.
134
135 - CDC Ethernet Emulation Model (EEM) is a newer standard that has
136 a simpler interface that can be used by more USB hardware.
137
fc4fa6e1 138 RNDIS support is an additional option, more demanding than subset.
8443f2d2
AP
139
140 Within the USB device, this gadget driver exposes a network device
141 "usbX", where X depends on what other networking devices you have.
142 Treat it like a two-node Ethernet link: host, and gadget.
143
144 The Linux-USB host-side "usbnet" driver interoperates with this
145 driver, so that deep I/O queues can be supported. On 2.4 kernels,
146 use "CDCEther" instead, if you're using the CDC option. That CDC
147 mode should also interoperate with standard CDC Ethernet class
148 drivers on other host operating systems.
149
150 Say "y" to link the driver statically, or "m" to build a
151 dynamically linked module called "g_ether".
152
153config USB_ETH_RNDIS
154 bool "RNDIS support"
155 depends on USB_ETH
156 select USB_LIBCOMPOSITE
157 select USB_F_RNDIS
158 default y
159 help
160 Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
161 and Microsoft provides redistributable binary RNDIS drivers for
162 older versions of Windows.
163
164 If you say "y" here, the Ethernet gadget driver will try to provide
165 a second device configuration, supporting RNDIS to talk to such
166 Microsoft USB hosts.
167
168 To make MS-Windows work with this, use Documentation/usb/linux.inf
169 as the "driver info file". For versions of MS-Windows older than
170 XP, you'll need to download drivers from Microsoft's website; a URL
171 is given in comments found in that info file.
172
173config USB_ETH_EEM
b14f8b90
KK
174 bool "Ethernet Emulation Model (EEM) support"
175 depends on USB_ETH
8443f2d2
AP
176 select USB_LIBCOMPOSITE
177 select USB_F_EEM
b14f8b90
KK
178 help
179 CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM
180 and therefore can be supported by more hardware. Technically ECM and
181 EEM are designed for different applications. The ECM model extends
182 the network interface to the target (e.g. a USB cable modem), and the
183 EEM model is for mobile devices to communicate with hosts using
184 ethernet over USB. For Linux gadgets, however, the interface with
185 the host is the same (a usbX device), so the differences are minimal.
186
187 If you say "y" here, the Ethernet gadget driver will use the EEM
188 protocol rather than ECM. If unsure, say "n".
8443f2d2
AP
189
190config USB_G_NCM
191 tristate "Network Control Model (NCM) support"
192 depends on NET
193 select USB_LIBCOMPOSITE
194 select USB_U_ETHER
195 select USB_F_NCM
196 select CRC32
197 help
198 This driver implements USB CDC NCM subclass standard. NCM is
199 an advanced protocol for Ethernet encapsulation, allows grouping
200 of several ethernet frames into one USB transfer and different
201 alignment possibilities.
202
203 Say "y" to link the driver statically, or "m" to build a
204 dynamically linked module called "g_ncm".
205
206config USB_GADGETFS
207 tristate "Gadget Filesystem"
208 help
209 This driver provides a filesystem based API that lets user mode
210 programs implement a single-configuration USB device, including
211 endpoint I/O and control requests that don't relate to enumeration.
212 All endpoints, transfer speeds, and transfer types supported by
213 the hardware are available, through read() and write() calls.
214
215 Say "y" to link the driver statically, or "m" to build a
216 dynamically linked module called "gadgetfs".
217
218config USB_FUNCTIONFS
219 tristate "Function Filesystem"
220 select USB_LIBCOMPOSITE
221 select USB_F_FS
222 select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
223 help
224 The Function Filesystem (FunctionFS) lets one create USB
225 composite functions in user space in the same way GadgetFS
226 lets one create USB gadgets in user space. This allows creation
227 of composite gadgets such that some of the functions are
228 implemented in kernel space (for instance Ethernet, serial or
229 mass storage) and other are implemented in user space.
230
231 If you say "y" or "m" here you will be able what kind of
232 configurations the gadget will provide.
233
234 Say "y" to link the driver statically, or "m" to build
235 a dynamically linked module called "g_ffs".
236
237config USB_FUNCTIONFS_ETH
238 bool "Include configuration with CDC ECM (Ethernet)"
239 depends on USB_FUNCTIONFS && NET
240 select USB_U_ETHER
241 select USB_F_ECM
242 select USB_F_SUBSET
243 help
244 Include a configuration with CDC ECM function (Ethernet) and the
245 Function Filesystem.
246
247config USB_FUNCTIONFS_RNDIS
248 bool "Include configuration with RNDIS (Ethernet)"
249 depends on USB_FUNCTIONFS && NET
250 select USB_U_ETHER
251 select USB_F_RNDIS
252 help
253 Include a configuration with RNDIS function (Ethernet) and the Filesystem.
254
255config USB_FUNCTIONFS_GENERIC
256 bool "Include 'pure' configuration"
257 depends on USB_FUNCTIONFS
258 help
259 Include a configuration with the Function Filesystem alone with
260 no Ethernet interface.
261
262config USB_MASS_STORAGE
263 tristate "Mass Storage Gadget"
264 depends on BLOCK
265 select USB_LIBCOMPOSITE
266 select USB_F_MASS_STORAGE
267 help
268 The Mass Storage Gadget acts as a USB Mass Storage disk drive.
269 As its storage repository it can use a regular file or a block
270 device (in much the same way as the "loop" device driver),
271 specified as a module parameter or sysfs option.
272
273 This driver is a replacement for now removed File-backed
274 Storage Gadget (g_file_storage).
275
276 Say "y" to link the driver statically, or "m" to build
277 a dynamically linked module called "g_mass_storage".
278
279config USB_GADGET_TARGET
280 tristate "USB Gadget Target Fabric Module"
281 depends on TARGET_CORE
282 select USB_LIBCOMPOSITE
00240714 283 select USB_F_TCM
8443f2d2
AP
284 help
285 This fabric is an USB gadget. Two USB protocols are supported that is
286 BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is
287 advertised on alternative interface 0 (primary) and UAS is on
288 alternative interface 1. Both protocols can work on USB2.0 and USB3.0.
289 UAS utilizes the USB 3.0 feature called streams support.
290
291config USB_G_SERIAL
292 tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
293 depends on TTY
294 select USB_U_SERIAL
295 select USB_F_ACM
296 select USB_F_SERIAL
297 select USB_F_OBEX
298 select USB_LIBCOMPOSITE
299 help
300 The Serial Gadget talks to the Linux-USB generic serial driver.
301 This driver supports a CDC-ACM module option, which can be used
302 to interoperate with MS-Windows hosts or with the Linux-USB
303 "cdc-acm" driver.
304
305 This driver also supports a CDC-OBEX option. You will need a
306 user space OBEX server talking to /dev/ttyGS*, since the kernel
307 itself doesn't implement the OBEX protocol.
308
309 Say "y" to link the driver statically, or "m" to build a
310 dynamically linked module called "g_serial".
311
ecefae6d 312 For more information, see Documentation/usb/gadget_serial.rst
8443f2d2
AP
313 which includes instructions and a "driver info file" needed to
314 make MS-Windows work with CDC ACM.
315
316config USB_MIDI_GADGET
317 tristate "MIDI Gadget"
318 depends on SND
319 select USB_LIBCOMPOSITE
320 select SND_RAWMIDI
32522a51 321 select USB_F_MIDI
8443f2d2
AP
322 help
323 The MIDI Gadget acts as a USB Audio device, with one MIDI
324 input and one MIDI output. These MIDI jacks appear as
325 a sound "card" in the ALSA sound system. Other MIDI
326 connections can then be made on the gadget system, using
327 ALSA's aconnect utility etc.
328
329 Say "y" to link the driver statically, or "m" to build a
330 dynamically linked module called "g_midi".
331
332config USB_G_PRINTER
333 tristate "Printer Gadget"
334 select USB_LIBCOMPOSITE
69504f80 335 select USB_F_PRINTER
8443f2d2
AP
336 help
337 The Printer Gadget channels data between the USB host and a
338 userspace program driving the print engine. The user space
339 program reads and writes the device file /dev/g_printer to
340 receive or send printer data. It can use ioctl calls to
341 the device file to get or set printer status.
342
343 Say "y" to link the driver statically, or "m" to build a
344 dynamically linked module called "g_printer".
345
ecefae6d 346 For more information, see Documentation/usb/gadget_printer.rst
8443f2d2
AP
347 which includes sample code for accessing the device file.
348
349if TTY
350
351config USB_CDC_COMPOSITE
352 tristate "CDC Composite Device (Ethernet and ACM)"
353 depends on NET
354 select USB_LIBCOMPOSITE
355 select USB_U_SERIAL
356 select USB_U_ETHER
357 select USB_F_ACM
358 select USB_F_ECM
359 help
360 This driver provides two functions in one configuration:
361 a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link.
362
363 This driver requires four bulk and two interrupt endpoints,
364 plus the ability to handle altsettings. Not all peripheral
365 controllers are that capable.
366
367 Say "y" to link the driver statically, or "m" to build a
368 dynamically linked module.
369
370config USB_G_NOKIA
371 tristate "Nokia composite gadget"
372 depends on PHONET
2e8328fb 373 depends on BLOCK
8443f2d2
AP
374 select USB_LIBCOMPOSITE
375 select USB_U_SERIAL
376 select USB_U_ETHER
377 select USB_F_ACM
378 select USB_F_OBEX
379 select USB_F_PHONET
380 select USB_F_ECM
5ea75095 381 select USB_F_MASS_STORAGE
8443f2d2
AP
382 help
383 The Nokia composite gadget provides support for acm, obex
384 and phonet in only one composite gadget driver.
385
386 It's only really useful for N900 hardware. If you're building
387 a kernel for N900, say Y or M here. If unsure, say N.
388
389config USB_G_ACM_MS
390 tristate "CDC Composite Device (ACM and mass storage)"
391 depends on BLOCK
392 select USB_LIBCOMPOSITE
393 select USB_U_SERIAL
394 select USB_F_ACM
395 select USB_F_MASS_STORAGE
396 help
397 This driver provides two functions in one configuration:
398 a mass storage, and a CDC ACM (serial port) link.
399
400 Say "y" to link the driver statically, or "m" to build a
401 dynamically linked module called "g_acm_ms".
402
403config USB_G_MULTI
404 tristate "Multifunction Composite Gadget"
405 depends on BLOCK && NET
406 select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS
407 select USB_LIBCOMPOSITE
408 select USB_U_SERIAL
409 select USB_U_ETHER
410 select USB_F_ACM
411 select USB_F_MASS_STORAGE
412 help
413 The Multifunction Composite Gadget provides Ethernet (RNDIS
414 and/or CDC Ethernet), mass storage and ACM serial link
415 interfaces.
416
417 You will be asked to choose which of the two configurations is
418 to be available in the gadget. At least one configuration must
419 be chosen to make the gadget usable. Selecting more than one
420 configuration will prevent Windows from automatically detecting
421 the gadget as a composite gadget, so an INF file will be needed to
422 use the gadget.
423
424 Say "y" to link the driver statically, or "m" to build a
425 dynamically linked module called "g_multi".
426
427config USB_G_MULTI_RNDIS
428 bool "RNDIS + CDC Serial + Storage configuration"
429 depends on USB_G_MULTI
430 select USB_F_RNDIS
431 default y
432 help
433 This option enables a configuration with RNDIS, CDC Serial and
434 Mass Storage functions available in the Multifunction Composite
435 Gadget. This is the configuration dedicated for Windows since RNDIS
436 is Microsoft's protocol.
437
438 If unsure, say "y".
439
440config USB_G_MULTI_CDC
441 bool "CDC Ethernet + CDC Serial + Storage configuration"
442 depends on USB_G_MULTI
8443f2d2
AP
443 select USB_F_ECM
444 help
445 This option enables a configuration with CDC Ethernet (ECM), CDC
446 Serial and Mass Storage functions available in the Multifunction
447 Composite Gadget.
448
449 If unsure, say "y".
450
451endif # TTY
452
453config USB_G_HID
454 tristate "HID Gadget"
455 select USB_LIBCOMPOSITE
4bc8a33f 456 select USB_F_HID
8443f2d2
AP
457 help
458 The HID gadget driver provides generic emulation of USB
459 Human Interface Devices (HID).
460
ecefae6d 461 For more information, see Documentation/usb/gadget_hid.rst which
8443f2d2
AP
462 includes sample code for accessing the device files.
463
464 Say "y" to link the driver statically, or "m" to build a
465 dynamically linked module called "g_hid".
466
467# Standalone / single function gadgets
468config USB_G_DBGP
469 tristate "EHCI Debug Device Gadget"
470 depends on TTY
471 select USB_LIBCOMPOSITE
472 help
473 This gadget emulates an EHCI Debug device. This is useful when you want
474 to interact with an EHCI Debug Port.
475
476 Say "y" to link the driver statically, or "m" to build a
477 dynamically linked module called "g_dbgp".
478
479if USB_G_DBGP
480choice
481 prompt "EHCI Debug Device mode"
482 default USB_G_DBGP_SERIAL
483
484config USB_G_DBGP_PRINTK
485 depends on USB_G_DBGP
486 bool "printk"
487 help
488 Directly printk() received data. No interaction.
489
490config USB_G_DBGP_SERIAL
491 depends on USB_G_DBGP
492 select USB_U_SERIAL
493 bool "serial"
494 help
495 Userland can interact using /dev/ttyGSxxx.
496endchoice
497endif
498
499# put drivers that need isochronous transfer support (for audio
500# or video class gadget drivers), or specific hardware, here.
501config USB_G_WEBCAM
502 tristate "USB Webcam Gadget"
54eed78c 503 depends on VIDEO_V4L2
8443f2d2
AP
504 select USB_LIBCOMPOSITE
505 select VIDEOBUF2_VMALLOC
c913881e 506 select USB_F_UVC
8443f2d2
AP
507 help
508 The Webcam Gadget acts as a composite USB Audio and Video Class
509 device. It provides a userspace API to process UVC control requests
510 and stream video data to the host.
511
512 Say "y" to link the driver statically, or "m" to build a
513 dynamically linked module called "g_webcam".
10e5e6c2 514
f2c2e717
AK
515config USB_RAW_GADGET
516 tristate "USB Raw Gadget"
517 help
518 USB Raw Gadget is a kernel module that provides a userspace interface
519 for the USB Gadget subsystem. Essentially it allows to emulate USB
520 devices from userspace. See Documentation/usb/raw-gadget.rst for
521 details.
522
523 Say "y" to link the driver statically, or "m" to build a
524 dynamically linked module called "raw_gadget".
525
df8df5e4 526endmenu