##
## This file is part of the coreboot project.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

config USB
	bool "USB Support"
	default y

config USB_UHCI
	bool "Support for USB UHCI controllers"
	depends on USB && ARCH_X86
	default y if !CHROMEOS
	help
	  Select this option if you are going to use USB 1.1 on an Intel based
	  system.

config USB_OHCI
	bool "Support for USB OHCI controllers"
	depends on USB
	default y if !CHROMEOS
	help
	  Select this option if you are going to use USB 1.1 on a non-Intel based
	  system.

config USB_EHCI
	bool "Support for USB EHCI controllers"
	depends on USB
	default y if !CHROMEOS
	help
	  Select this option if you want to use USB 2.0

config USB_XHCI
	bool "Support for USB xHCI controllers"
	depends on USB
	default y if !CHROMEOS
	help
	  Select this option if you want to use USB 3.0

config USB_XHCI_MTK_QUIRK
	bool "Support for USB xHCI controllers on MTK SoC"
	depends on USB_XHCI
	help
	  Select this option if you want to use USB 3.0 on MTK platform.

config USB_DWC2
	bool "Support for USB DesignWare HCD controllers"
	depends on USB
	help
	  Select this option if you want to use DesignWare USB 2.0 host controller

config USB_HID
	bool "Support for USB keyboards"
	depends on USB
	default y
	help
	  Select this option if you want to use devices complying to the
	  USB HID (Human Interface Device) standard. Such devices are for
	  example keyboards and mice. Currently only keyboards are supported.
	  Say Y here unless you know exactly what you are doing.

config USB_HUB
	bool "Support for USB hubs"
	depends on USB
	default y
	help
	  Select this option if you want to compile in support for USB hubs.
	  Say Y here unless you know exactly what you are doing.

config USB_EHCI_HOSTPC_ROOT_HUB_TT
	bool "Support for USB EHCI ROOT HUB that has TT"
	depends on USB_EHCI
	default n
	help
	  Select this option if USB EHCI root hub supports TT (Transaction
	  Translator).
	  To support this TT feature we read port-speed from non-standard
	  register HOSTPC (offset 84h of Operational Register base).

config USB_MSC
	bool "Support for USB storage"
	depends on USB
	default y
	help
	  Select this option if you want to compile in support for USB mass
	  storage devices (USB memory sticks, hard drives, CDROM/DVD drives)
	  Say Y here unless you know exactly what you are doing.

config USB_GEN_HUB
	bool
	default n if (!USB_HUB && !USB_XHCI)
	default y if (USB_HUB || USB_XHCI)
config USB_PCI
	bool "Auto-scan PCI bus for USB host controllers"
	depends on USB
	default y if ARCH_X86
	default n

config UDC
	bool "USB device mode support"
	default n
	help
	  Select this option to add support for running as
	  a USB device.

config UDC_CI
	bool "ChipIdea driver for USB device mode"
	depends on UDC
	default n
	help
	  Select this option to add the driver for ChipIdea
	  USB device controller.

config UDC_DWC2
	bool "Designware driver for USB device mode"
	depends on UDC
	default n
	help
	  Select this option to add the driver for Designware
	  USB device controller.
