#
# USB device configuration
#

config USB_OHCI_BIG_ENDIAN_DESC
	bool

config USB_OHCI_BIG_ENDIAN_MMIO
	bool

config USB_OHCI_LITTLE_ENDIAN
	bool
	default n if STB03xxx || PPC_MPC52xx
	default y

config USB_EHCI_BIG_ENDIAN_MMIO
	bool

config USB_EHCI_BIG_ENDIAN_DESC
	bool

config USB_UHCI_BIG_ENDIAN_MMIO
	bool
	default y if SPARC_LEON

config USB_UHCI_BIG_ENDIAN_DESC
	bool
	default y if SPARC_LEON

menuconfig USB_SUPPORT
	bool "USB support"
	depends on HAS_IOMEM
	default y
	---help---
	  This option adds core support for Universal Serial Bus (USB).
	  You will also need drivers from the following menu to make use of it.

if USB_SUPPORT

config USB_COMMON
	tristate

config USB_ARCH_HAS_HCD
	def_bool y

config USB
	tristate "Support for Host-side USB"
	depends on USB_ARCH_HAS_HCD
	select USB_COMMON
	select NLS  # for UTF-8 strings
	---help---
	  Universal Serial Bus (USB) is a specification for a serial bus
	  subsystem which offers higher speeds and more features than the
	  traditional PC serial port.  The bus supplies power to peripherals
	  and allows for hot swapping.  Up to 127 USB peripherals can be
	  connected to a single USB host in a tree structure.
	  
	  The USB host is the root of the tree, the peripherals are the
	  leaves and the inner nodes are special USB devices called hubs.
	  Most PCs now have USB host ports, used to connect peripherals
	  such as scanners, keyboards, mice, modems, cameras, disks,
	  flash memory, network links, and printers to the PC.

	  Say Y here if your computer has a host-side USB port and you want
	  to use USB devices.  You then need to say Y to at least one of the
	  Host Controller Driver (HCD) options below.  Choose a USB 1.1
	  controller, such as "UHCI HCD support" or "OHCI HCD support",
	  and "EHCI HCD (USB 2.0) support" except for older systems that
	  do not have USB 2.0 support.  It doesn't normally hurt to select
	  them all if you are not certain.

	  If your system has a device-side USB port, used in the peripheral
	  side of the USB protocol, see the "USB Gadget" framework instead.

	  After choosing your HCD, then select drivers for the USB peripherals
	  you'll be using.  You may want to check out the information provided
	  in <file:Documentation/usb/> and especially the links given in
	  <file:Documentation/usb/usb-help.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called usbcore.

config USB_PCI
	bool "PCI based USB host interface"
	depends on PCI
	default y
	---help---
	  A lot of embeded system SOC (e.g. freescale T2080) have both
	  PCI and USB modules. But USB module is controlled by registers
	  directly, it have no relationship with PCI module.

	  When say N here it will not build PCI related code in USB driver.

if USB

source "drivers/usb/core/Kconfig"

source "drivers/usb/mon/Kconfig"

source "drivers/usb/wusbcore/Kconfig"

source "drivers/usb/host/Kconfig"

source "drivers/usb/renesas_usbhs/Kconfig"

source "drivers/usb/class/Kconfig"

source "drivers/usb/storage/Kconfig"

source "drivers/usb/image/Kconfig"

source "drivers/usb/usbip/Kconfig"

endif

source "drivers/usb/mtu3/Kconfig"

source "drivers/usb/musb/Kconfig"

source "drivers/usb/dwc3/Kconfig"

source "drivers/usb/dwc2/Kconfig"

source "drivers/usb/chipidea/Kconfig"

source "drivers/usb/isp1760/Kconfig"

comment "USB port drivers"

if USB

config USB_USS720
	tristate "USS720 parport driver"
	depends on PARPORT
	select PARPORT_NOT_PC
	---help---
	  This driver is for USB parallel port adapters that use the Lucent
	  Technologies USS-720 chip. These cables are plugged into your USB
	  port and provide USB compatibility to peripherals designed with
	  parallel port interfaces.

	  The chip has two modes: automatic mode and manual mode. In automatic
	  mode, it looks to the computer like a standard USB printer. Only
	  printers may be connected to the USS-720 in this mode. The generic
	  USB printer driver ("USB Printer support", above) may be used in
	  that mode, and you can say N here if you want to use the chip only
	  in this mode.

	  Manual mode is not limited to printers, any parallel port
	  device should work. This driver utilizes manual mode.
	  Note however that some operations are three orders of magnitude
	  slower than on a PCI/ISA Parallel Port, so timing critical
	  applications might not work.

	  Say Y here if you own an USS-720 USB->Parport cable and intend to
	  connect anything other than a printer to it.

	  To compile this driver as a module, choose M here: the
	  module will be called uss720.

source "drivers/usb/serial/Kconfig"

source "drivers/usb/misc/Kconfig"

source "drivers/usb/atm/Kconfig"

endif # USB

source "drivers/usb/phy/Kconfig"

source "drivers/usb/gadget/Kconfig"

source "drivers/usb/typec/Kconfig"

config USB_LED_TRIG
	bool "USB LED Triggers"
	depends on LEDS_CLASS && LEDS_TRIGGERS
	select USB_COMMON
	help
	  This option adds LED triggers for USB host and/or gadget activity.

	  Say Y here if you are working on a system with led-class supported
	  LEDs and you want to use them as activity indicators for USB host or
	  gadget.

config USB_ULPI_BUS
	tristate "USB ULPI PHY interface support"
	select USB_COMMON
	help
	  UTMI+ Low Pin Interface (ULPI) is specification for a commonly used
	  USB 2.0 PHY interface. The ULPI specification defines a standard set
	  of registers that can be used to detect the vendor and product which
	  allows ULPI to be handled as a bus. This module is the driver for that
	  bus.

	  The ULPI interfaces (the buses) are registered by the drivers for USB
	  controllers which support ULPI register access and have ULPI PHY
	  attached to them. The ULPI PHY drivers themselves are normal PHY
	  drivers.

	  ULPI PHYs provide often functions such as ADP sensing/probing (OTG
	  protocol) and USB charger detection.

	  To compile this driver as a module, choose M here: the module will
	  be called ulpi.

endif # USB_SUPPORT
