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