#
# USB Gadget support on a system involves
#    (a) a peripheral controller, and
#    (b) the gadget driver using it.
#
# NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
#
#  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
#  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
#  - Some systems have both kinds of controllers.
#
# With help from a special transceiver and a "Mini-AB" jack, systems with
# both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
#

menuconfig USB_GADGET
	bool "USB Gadget Support"
	depends on DM
	select DM_USB
	help
	   USB is a master/slave protocol, organized with one master
	   host (such as a PC) controlling up to 127 peripheral devices.
	   The USB hardware is asymmetric, which makes it easier to set up:
	   you can't connect a "to-the-host" connector to a peripheral.

	   U-Boot can run in the host, or in the peripheral.  In both cases
	   you need a low level bus controller driver, and some software
	   talking to it.  Peripheral controllers are often discrete silicon,
	   or are integrated with the CPU in a microcontroller.  The more
	   familiar host side controllers have names like "EHCI", "OHCI",
	   or "UHCI", and are usually integrated into southbridges on PC
	   motherboards.

	   Enable this configuration option if you want to run U-Boot inside
	   a USB peripheral device.  Configure one hardware driver for your
	   peripheral/device side bus controller, and a "gadget driver" for
	   your peripheral protocol.

config SPL_USB_GADGET
	bool "USB Gadget Support in SPL"
	help
	  Enable USB Gadget API which allows to enable USB device functions
	  in SPL.

if USB_GADGET

config USB_GADGET_MANUFACTURER
	string "Vendor name of the USB device"
	default "NVIDIA" if ARCH_TEGRA
	default "Allwinner Technology" if ARCH_SUNXI
	default "Rockchip" if ARCH_ROCKCHIP
	default "U-Boot"
	help
	  Vendor name of the USB device emulated, reported to the host device.
	  This is usually either the manufacturer of the device or the SoC.

config USB_GADGET_VENDOR_NUM
	hex "Vendor ID of the USB device"
	default 0x0955 if ARCH_TEGRA
	default 0x1f3a if ARCH_SUNXI
	default 0x2207 if ARCH_ROCKCHIP
	default 0x0
	help
	  Vendor ID of the USB device emulated, reported to the host device.
	  This is usually the board or SoC vendor's, unless you've registered
	  for one.

config USB_GADGET_PRODUCT_NUM
	hex "Product ID of the USB device"
	default 0x701a if ARCH_TEGRA
	default 0x1010 if ARCH_SUNXI
	default 0x310a if ROCKCHIP_RK3036
	default 0x300a if ROCKCHIP_RK3066
	default 0x310c if ROCKCHIP_RK3128
	default 0x320a if ROCKCHIP_RK3229 || ROCKCHIP_RK3288
	default 0x330a if ROCKCHIP_RK3328
	default 0x330c if ROCKCHIP_RK3399
	default 0x0
	help
	  Product ID of the USB device emulated, reported to the host device.

config USB_GADGET_ATMEL_USBA
	bool "Atmel USBA"
	select USB_GADGET_DUALSPEED
	help
	  USBA is the integrated high-speed USB Device controller on
	  the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.

config USB_GADGET_BCM_UDC_OTG_PHY
	bool "Broadcom UDC OTG PHY"
	help
	  Enable the Broadcom UDC OTG physical device interface.

config USB_GADGET_AT91
	bool "Atmel AT91 USB Gadget Controller"
	depends on ARCH_AT91

config USB_GADGET_DWC2_OTG
	bool "DesignWare USB2.0 HS OTG controller (gadget mode)"
	select USB_GADGET_DUALSPEED
	help
	  The Designware USB2.0 high-speed gadget controller
	  integrated into many SoCs. Select this option if you want the
	  driver to operate in Peripheral mode. This option requires
	  USB_GADGET to be enabled.

if USB_GADGET_DWC2_OTG

config USB_GADGET_DWC2_OTG_PHY
	bool "DesignWare USB2.0 HS OTG PHY"
	help
	  Enable the DesignWare USB2.0 HS OTG physical device interface.

config USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8
	bool "DesignWare USB2.0 HS OTG controller 8-bit PHY bus width"
	help
	  Set the Designware USB2.0 high-speed OTG controller
	  PHY interface width to 8 bits, rather than the default (16 bits).

endif # USB_GADGET_DWC2_OTG

config USB_GADGET_OS_DESCRIPTORS
	bool "USB OS Feature Descriptors support"
	help
	  This is a porting patch from linux kernel: 37a3a533429e
	  ("usb: gadget: OS Feature Descriptors support"), the original commit
	  log see below:
	  There is a custom (non-USB IF) extension to the USB standard:
	  http://msdn.microsoft.com/library/windows/hardware/gg463182

config CI_UDC
	bool "ChipIdea device controller"
	select USB_GADGET_DUALSPEED
	help
	  Say Y here to enable device controller functionality of the
	  ChipIdea driver.

config USB_GADGET_MAX3420
	bool "MAX3420 USB Over SPI"
	depends on DM_SPI
	help
	  MAX3420, from MAXIM, implements USB-over-SPI Full-Speed device controller.

config USB_GADGET_VBUS_DRAW
	int "Maximum VBUS Power usage (2-500 mA)"
	range 2 500
	default 2
	help
	   Some devices need to draw power from USB when they are
	   configured, perhaps to operate circuitry or to recharge
	   batteries.  This is in addition to any local power supply,
	   such as an AC adapter or batteries.

	   Enter the maximum power your device draws through USB, in
	   milliAmperes.  The permitted range of values is 2 - 500 mA;
	   0 mA would be legal, but can make some hosts misbehave.

	   This value will be used except for system-specific gadget
	   drivers that have more specific information.

config SDP_LOADADDR
	hex "Default load address at SDP_WRITE and SDP_JUMP"
	default 0

# Selected by UDC drivers that support high-speed operation.
config USB_GADGET_DUALSPEED
	bool

config USB_GADGET_DOWNLOAD
	bool "Enable USB download gadget"
	help
	  Composite USB download gadget support (g_dnl) for download functions.
	  This code works on top of composite gadget.

if USB_GADGET_DOWNLOAD

config USB_FUNCTION_MASS_STORAGE
	bool "Enable USB mass storage gadget"
	help
	  Enable mass storage protocol support in U-Boot. It allows exporting
	  the eMMC/SD card content to HOST PC so it can be mounted.

config USB_FUNCTION_ROCKUSB
        bool "Enable USB rockusb gadget"
        help
          Rockusb protocol is widely used by Rockchip SoC based devices. It can
          read/write info, image to/from devices. This enables the USB part of
          the rockusb gadget.for more detail about Rockusb protocol, please see
          doc/README.rockusb

config USB_FUNCTION_SDP
	bool "Enable USB SDP (Serial Download Protocol)"
	help
	  Enable Serial Download Protocol (SDP) device support in U-Boot. This
	  allows to download images into memory and execute (jump to) them
	  using the same protocol as implemented by the i.MX family's boot ROM.

config USB_FUNCTION_THOR
	bool "Enable USB THOR gadget"
	help
	  Enable Tizen's THOR download protocol support in U-Boot. It
	  allows downloading images into memory and flash them to target device.

config USB_FUNCTION_ACM
	bool "Enable CDC ACM gadget"
	select SYS_STDIO_DEREGISTER
	select CIRCBUF
	help
	  ACM serial link. This function can be used to create a stdio device to
	  interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm"
	  driver.

endif # USB_GADGET_DOWNLOAD

config USB_ETHER
	bool "USB Ethernet Gadget"
	depends on NET
	default y if ARCH_SUNXI && USB_MUSB_GADGET
	help
	  Creates an Ethernet network device through a USB peripheral
	  controller. This will create a network interface on both the device
	  (U-Boot) and the host (remote device) that can be used just like any
	  other nework interface.
	  It will bind on the peripheral USB controller, ignoring the USB hosts
	  controllers in the system.

if USB_ETHER

choice
	prompt "USB Ethernet Gadget Model"
	default USB_ETH_RNDIS
	help
	  There is several models (protocols) to implement Ethernet over USB
	  devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
	  (also called CDC-ECM). RNDIS is obviously compatible with Windows,
	  while CDC-ECM is not. Most other operating systems support both, so
	  if inter-operability is a concern, RNDIS is to be preferred.

config USB_ETH_CDC
	bool "CDC-ECM Protocol"
	help
	  CDC (Communications Device Class) is the standard for Ethernet over
	  USB devices. While there's several alternatives, the most widely used
	  protocol is ECM (Ethernet Control Model). However, compatibility with
	  Windows is not that great.

config USB_ETH_RNDIS
	bool "RNDIS Protocol"
	help
	  The RNDIS (Remote Network Driver Interface Specification) is a
	  Microsoft proprietary protocol to create an Ethernet device over USB.
	  Windows obviously supports it, as well as all the major operating
	  systems, so it's the best option for compatibility.

endchoice

config USBNET_DEV_ADDR
	string "USB Gadget Ethernet device mac address"
	default "de:ad:be:ef:00:01"
	help
	  Ethernet MAC address of the device-side (ie. local board's) MAC
	  address of the usb_ether interface

config USBNET_HOST_ADDR
	string "USB Gadget Ethernet host mac address"
	default "de:ad:be:ef:00:00"
	help
	  Ethernet MAC address of the host-side (ie. remote device's) MAC
	  address of the usb_ether interface

endif # USB_ETHER

endif # USB_GADGET

if SPL_USB_GADGET

config SPL_USB_ETHER
	bool "Support USB Ethernet drivers in SPL"
	depends on SPL_NET
	help
	  Enable access to the USB network subsystem and associated
	  drivers in SPL. This permits SPL to load U-Boot over a
	  USB-connected Ethernet link (such as a USB Ethernet dongle) rather
	  than from an onboard peripheral. Environment support is required
	  since the network stack uses a number of environment variables.
	  See also SPL_NET and SPL_ETH.

if SPL_USB_ETHER

choice
	prompt "USB Ethernet Gadget Model in SPL"
	default SPL_USB_ETH_RNDIS
	help
	  There is several models (protocols) to implement Ethernet over USB
	  devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
	  (also called CDC-ECM). RNDIS is obviously compatible with Windows,
	  while CDC-ECM is not. Most other operating systems support both, so
	  if inter-operability is a concern, RNDIS is to be preferred.

config SPL_USB_ETH_RNDIS
	bool "RNDIS Protocol"
	help
	  The RNDIS (Remote Network Driver Interface Specification) is a
	  Microsoft proprietary protocol to create an Ethernet device over USB.
	  Windows obviously supports it, as well as all the major operating
	  systems, so it's the best option for compatibility.

endchoice

endif # SPL_USB_ETHER

config SPL_DFU
	bool "Support DFU (Device Firmware Upgrade) in SPL"
	select SPL_HASH
	select SPL_DFU_NO_RESET
	depends on SPL_RAM_SUPPORT
	help
	  This feature enables the DFU (Device Firmware Upgrade) in SPL with
	  RAM memory device support. The ROM code will load and execute
	  the SPL built with dfu. The user can load binaries (u-boot/kernel) to
	  selected device partition from host-pc using dfu-utils.
	  This feature is useful to flash the binaries to factory or bare-metal
	  boards using USB interface.

choice
	bool "DFU device selection in SPL"
	depends on SPL_DFU

config SPL_DFU_RAM
	bool "RAM device"
	depends on SPL_DFU && SPL_RAM_SUPPORT
	help
	 select RAM/DDR memory device for loading binary images
	 (u-boot/kernel) to the selected device partition using
	 DFU and execute the u-boot/kernel from RAM.

endchoice

config SPL_USB_SDP_SUPPORT
	bool "Support SDP (Serial Download Protocol) in SPL"
	depends on SPL_SERIAL
	help
	  Enable Serial Download Protocol (SDP) device support in SPL. This
	  allows to download images into memory and execute (jump to) them
	  using the same protocol as implemented by the i.MX family's boot ROM.

config SPL_SDP_USB_DEV
	int "SDP USB controller index in SPL"
	default 0
	depends on SPL_USB_SDP_SUPPORT
	help
	  Some boards have USB controller other than 0. Define this option
	  so it can be used in compiled environment.

endif # SPL_USB_GADGET
