Prepare v2023.10
[platform/kernel/u-boot.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         bool "USB Gadget Support"
18         depends on DM
19         select DM_USB
20         help
21            USB is a master/slave protocol, organized with one master
22            host (such as a PC) controlling up to 127 peripheral devices.
23            The USB hardware is asymmetric, which makes it easier to set up:
24            you can't connect a "to-the-host" connector to a peripheral.
25
26            U-Boot can run in the host, or in the peripheral.  In both cases
27            you need a low level bus controller driver, and some software
28            talking to it.  Peripheral controllers are often discrete silicon,
29            or are integrated with the CPU in a microcontroller.  The more
30            familiar host side controllers have names like "EHCI", "OHCI",
31            or "UHCI", and are usually integrated into southbridges on PC
32            motherboards.
33
34            Enable this configuration option if you want to run U-Boot inside
35            a USB peripheral device.  Configure one hardware driver for your
36            peripheral/device side bus controller, and a "gadget driver" for
37            your peripheral protocol.
38
39 config SPL_USB_GADGET
40         bool "USB Gadget Support in SPL"
41         help
42           Enable USB Gadget API which allows to enable USB device functions
43           in SPL.
44
45 if USB_GADGET
46
47 config USB_GADGET_MANUFACTURER
48         string "Vendor name of the USB device"
49         default "NVIDIA" if ARCH_TEGRA
50         default "Allwinner Technology" if ARCH_SUNXI
51         default "Rockchip" if ARCH_ROCKCHIP
52         default "U-Boot"
53         help
54           Vendor name of the USB device emulated, reported to the host device.
55           This is usually either the manufacturer of the device or the SoC.
56
57 config USB_GADGET_VENDOR_NUM
58         hex "Vendor ID of the USB device"
59         default 0x0955 if ARCH_TEGRA
60         default 0x1f3a if ARCH_SUNXI
61         default 0x2207 if ARCH_ROCKCHIP
62         default 0x0
63         help
64           Vendor ID of the USB device emulated, reported to the host device.
65           This is usually the board or SoC vendor's, unless you've registered
66           for one.
67
68 config USB_GADGET_PRODUCT_NUM
69         hex "Product ID of the USB device"
70         default 0x701a if ARCH_TEGRA
71         default 0x1010 if ARCH_SUNXI
72         default 0x310a if ROCKCHIP_RK3036
73         default 0x300a if ROCKCHIP_RK3066
74         default 0x310c if ROCKCHIP_RK3128
75         default 0x320a if ROCKCHIP_RK3229 || ROCKCHIP_RK3288
76         default 0x330a if ROCKCHIP_RK3328
77         default 0x330c if ROCKCHIP_RK3399
78         default 0x0
79         help
80           Product ID of the USB device emulated, reported to the host device.
81
82 config USB_GADGET_ATMEL_USBA
83         bool "Atmel USBA"
84         select USB_GADGET_DUALSPEED
85         help
86           USBA is the integrated high-speed USB Device controller on
87           the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
88
89 config USB_GADGET_BCM_UDC_OTG_PHY
90         bool "Broadcom UDC OTG PHY"
91         help
92           Enable the Broadcom UDC OTG physical device interface.
93
94 config USB_GADGET_AT91
95         bool "Atmel AT91 USB Gadget Controller"
96         depends on ARCH_AT91
97
98 config USB_GADGET_DWC2_OTG
99         bool "DesignWare USB2.0 HS OTG controller (gadget mode)"
100         select USB_GADGET_DUALSPEED
101         help
102           The Designware USB2.0 high-speed gadget controller
103           integrated into many SoCs. Select this option if you want the
104           driver to operate in Peripheral mode. This option requires
105           USB_GADGET to be enabled.
106
107 if USB_GADGET_DWC2_OTG
108
109 config USB_GADGET_DWC2_OTG_PHY
110         bool "DesignWare USB2.0 HS OTG PHY"
111         help
112           Enable the DesignWare USB2.0 HS OTG physical device interface.
113
114 config USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8
115         bool "DesignWare USB2.0 HS OTG controller 8-bit PHY bus width"
116         help
117           Set the Designware USB2.0 high-speed OTG controller
118           PHY interface width to 8 bits, rather than the default (16 bits).
119
120 endif # USB_GADGET_DWC2_OTG
121
122 config USB_GADGET_OS_DESCRIPTORS
123         bool "USB OS Feature Descriptors support"
124         help
125           This is a porting patch from linux kernel: 37a3a533429e
126           ("usb: gadget: OS Feature Descriptors support"), the original commit
127           log see below:
128           There is a custom (non-USB IF) extension to the USB standard:
129           http://msdn.microsoft.com/library/windows/hardware/gg463182
130
131 config CI_UDC
132         bool "ChipIdea device controller"
133         select USB_GADGET_DUALSPEED
134         help
135           Say Y here to enable device controller functionality of the
136           ChipIdea driver.
137
138 config USB_GADGET_MAX3420
139         bool "MAX3420 USB Over SPI"
140         depends on DM_SPI
141         help
142           MAX3420, from MAXIM, implements USB-over-SPI Full-Speed device controller.
143
144 config USB_GADGET_VBUS_DRAW
145         int "Maximum VBUS Power usage (2-500 mA)"
146         range 2 500
147         default 2
148         help
149            Some devices need to draw power from USB when they are
150            configured, perhaps to operate circuitry or to recharge
151            batteries.  This is in addition to any local power supply,
152            such as an AC adapter or batteries.
153
154            Enter the maximum power your device draws through USB, in
155            milliAmperes.  The permitted range of values is 2 - 500 mA;
156            0 mA would be legal, but can make some hosts misbehave.
157
158            This value will be used except for system-specific gadget
159            drivers that have more specific information.
160
161 config SDP_LOADADDR
162         hex "Default load address at SDP_WRITE and SDP_JUMP"
163         default 0
164
165 # Selected by UDC drivers that support high-speed operation.
166 config USB_GADGET_DUALSPEED
167         bool
168
169 config USB_GADGET_DOWNLOAD
170         bool "Enable USB download gadget"
171         help
172           Composite USB download gadget support (g_dnl) for download functions.
173           This code works on top of composite gadget.
174
175 if USB_GADGET_DOWNLOAD
176
177 config USB_FUNCTION_MASS_STORAGE
178         bool "Enable USB mass storage gadget"
179         help
180           Enable mass storage protocol support in U-Boot. It allows exporting
181           the eMMC/SD card content to HOST PC so it can be mounted.
182
183 config USB_FUNCTION_ROCKUSB
184         bool "Enable USB rockusb gadget"
185         help
186           Rockusb protocol is widely used by Rockchip SoC based devices. It can
187           read/write info, image to/from devices. This enables the USB part of
188           the rockusb gadget.for more detail about Rockusb protocol, please see
189           doc/README.rockusb
190
191 config USB_FUNCTION_SDP
192         bool "Enable USB SDP (Serial Download Protocol)"
193         help
194           Enable Serial Download Protocol (SDP) device support in U-Boot. This
195           allows to download images into memory and execute (jump to) them
196           using the same protocol as implemented by the i.MX family's boot ROM.
197
198 config USB_FUNCTION_THOR
199         bool "Enable USB THOR gadget"
200         help
201           Enable Tizen's THOR download protocol support in U-Boot. It
202           allows downloading images into memory and flash them to target device.
203
204 config USB_FUNCTION_ACM
205         bool "Enable CDC ACM gadget"
206         select SYS_STDIO_DEREGISTER
207         select CIRCBUF
208         help
209           ACM serial link. This function can be used to create a stdio device to
210           interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm"
211           driver.
212
213 endif # USB_GADGET_DOWNLOAD
214
215 config USB_ETHER
216         bool "USB Ethernet Gadget"
217         depends on NET
218         default y if ARCH_SUNXI && USB_MUSB_GADGET
219         help
220           Creates an Ethernet network device through a USB peripheral
221           controller. This will create a network interface on both the device
222           (U-Boot) and the host (remote device) that can be used just like any
223           other nework interface.
224           It will bind on the peripheral USB controller, ignoring the USB hosts
225           controllers in the system.
226
227 if USB_ETHER
228
229 choice
230         prompt "USB Ethernet Gadget Model"
231         default USB_ETH_RNDIS
232         help
233           There is several models (protocols) to implement Ethernet over USB
234           devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
235           (also called CDC-ECM). RNDIS is obviously compatible with Windows,
236           while CDC-ECM is not. Most other operating systems support both, so
237           if inter-operability is a concern, RNDIS is to be preferred.
238
239 config USB_ETH_CDC
240         bool "CDC-ECM Protocol"
241         help
242           CDC (Communications Device Class) is the standard for Ethernet over
243           USB devices. While there's several alternatives, the most widely used
244           protocol is ECM (Ethernet Control Model). However, compatibility with
245           Windows is not that great.
246
247 config USB_ETH_RNDIS
248         bool "RNDIS Protocol"
249         help
250           The RNDIS (Remote Network Driver Interface Specification) is a
251           Microsoft proprietary protocol to create an Ethernet device over USB.
252           Windows obviously supports it, as well as all the major operating
253           systems, so it's the best option for compatibility.
254
255 endchoice
256
257 config USBNET_DEV_ADDR
258         string "USB Gadget Ethernet device mac address"
259         default "de:ad:be:ef:00:01"
260         help
261           Ethernet MAC address of the device-side (ie. local board's) MAC
262           address of the usb_ether interface
263
264 config USBNET_HOST_ADDR
265         string "USB Gadget Ethernet host mac address"
266         default "de:ad:be:ef:00:00"
267         help
268           Ethernet MAC address of the host-side (ie. remote device's) MAC
269           address of the usb_ether interface
270
271 endif # USB_ETHER
272
273 endif # USB_GADGET
274
275 if SPL_USB_GADGET
276
277 config SPL_USB_ETHER
278         bool "Support USB Ethernet drivers in SPL"
279         depends on SPL_NET
280         help
281           Enable access to the USB network subsystem and associated
282           drivers in SPL. This permits SPL to load U-Boot over a
283           USB-connected Ethernet link (such as a USB Ethernet dongle) rather
284           than from an onboard peripheral. Environment support is required
285           since the network stack uses a number of environment variables.
286           See also SPL_NET and SPL_ETH.
287
288 if SPL_USB_ETHER
289
290 choice
291         prompt "USB Ethernet Gadget Model in SPL"
292         default SPL_USB_ETH_RNDIS
293         help
294           There is several models (protocols) to implement Ethernet over USB
295           devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
296           (also called CDC-ECM). RNDIS is obviously compatible with Windows,
297           while CDC-ECM is not. Most other operating systems support both, so
298           if inter-operability is a concern, RNDIS is to be preferred.
299
300 config SPL_USB_ETH_RNDIS
301         bool "RNDIS Protocol"
302         help
303           The RNDIS (Remote Network Driver Interface Specification) is a
304           Microsoft proprietary protocol to create an Ethernet device over USB.
305           Windows obviously supports it, as well as all the major operating
306           systems, so it's the best option for compatibility.
307
308 endchoice
309
310 endif # SPL_USB_ETHER
311
312 config SPL_DFU
313         bool "Support DFU (Device Firmware Upgrade) in SPL"
314         select SPL_HASH
315         select SPL_DFU_NO_RESET
316         depends on SPL_RAM_SUPPORT
317         help
318           This feature enables the DFU (Device Firmware Upgrade) in SPL with
319           RAM memory device support. The ROM code will load and execute
320           the SPL built with dfu. The user can load binaries (u-boot/kernel) to
321           selected device partition from host-pc using dfu-utils.
322           This feature is useful to flash the binaries to factory or bare-metal
323           boards using USB interface.
324
325 choice
326         bool "DFU device selection in SPL"
327         depends on SPL_DFU
328
329 config SPL_DFU_RAM
330         bool "RAM device"
331         depends on SPL_DFU && SPL_RAM_SUPPORT
332         help
333          select RAM/DDR memory device for loading binary images
334          (u-boot/kernel) to the selected device partition using
335          DFU and execute the u-boot/kernel from RAM.
336
337 endchoice
338
339 config SPL_USB_SDP_SUPPORT
340         bool "Support SDP (Serial Download Protocol) in SPL"
341         depends on SPL_SERIAL
342         help
343           Enable Serial Download Protocol (SDP) device support in SPL. This
344           allows to download images into memory and execute (jump to) them
345           using the same protocol as implemented by the i.MX family's boot ROM.
346
347 config SPL_SDP_USB_DEV
348         int "SDP USB controller index in SPL"
349         default 0
350         depends on SPL_USB_SDP_SUPPORT
351         help
352           Some boards have USB controller other than 0. Define this option
353           so it can be used in compiled environment.
354
355 endif # SPL_USB_GADGET