#
# USB Host Controller Drivers
#
comment "USB Host Controller Drivers"

config USB_C67X00_HCD
	tristate "Cypress C67x00 HCD support"
	help
	  The Cypress C67x00 (EZ-Host/EZ-OTG) chips are dual-role
	  host/peripheral/OTG USB controllers.

	  Enable this option to support this chip in host controller mode.
	  If unsure, say N.

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

config USB_XHCI_HCD
	tristate "xHCI HCD (USB 3.0) support"
	---help---
	  The eXtensible Host Controller Interface (xHCI) is standard for USB 3.0
	  "SuperSpeed" host controller hardware.

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

if USB_XHCI_HCD

config USB_XHCI_PCI
       tristate
       depends on PCI
       default y

config USB_XHCI_PLATFORM
	tristate

config USB_XHCI_MVEBU
	tristate "xHCI support for Marvell Armada 375/38x"
	select USB_XHCI_PLATFORM
	depends on ARCH_MVEBU || COMPILE_TEST
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in Marvell Armada 375/38x ARM SOCs.

config USB_XHCI_RCAR
	tristate "xHCI support for Renesas R-Car SoCs"
	select USB_XHCI_PLATFORM
	depends on ARCH_SHMOBILE || COMPILE_TEST
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in Renesas R-Car ARM SoCs.

endif # USB_XHCI_HCD

config USB_EHCI_HCD
	tristate "EHCI HCD (USB 2.0) support"
	---help---
	  The Enhanced Host Controller Interface (EHCI) is standard for USB 2.0
	  "high speed" (480 Mbit/sec, 60 Mbyte/sec) host controller hardware.
	  If your USB host controller supports USB 2.0, you will likely want to
	  configure this Host Controller Driver.

	  EHCI controllers are packaged with "companion" host controllers (OHCI
	  or UHCI) to handle USB 1.1 devices connected to root hub ports.  Ports
	  will connect to EHCI if the device is high speed, otherwise they
	  connect to a companion controller.  If you configure EHCI, you should
	  probably configure the OHCI (for NEC and some other vendors) USB Host
	  Controller Driver or UHCI (for Via motherboards) Host Controller
	  Driver too.

	  You may want to read <file:Documentation/usb/ehci.txt>.

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

config USB_EHCI_ROOT_HUB_TT
	bool "Root Hub Transaction Translators"
	depends on USB_EHCI_HCD
	---help---
	  Some EHCI chips have vendor-specific extensions to integrate
	  transaction translators, so that no OHCI or UHCI companion
	  controller is needed.  It's safe to say "y" even if your
	  controller doesn't support this feature.

	  This supports the EHCI implementation that's originally
	  from ARC, and has since changed hands a few times.

config USB_EHCI_TT_NEWSCHED
	bool "Improved Transaction Translator scheduling"
	depends on USB_EHCI_HCD
	default y
	---help---
	  This changes the periodic scheduling code to fill more of the low
	  and full speed bandwidth available from the Transaction Translator
	  (TT) in USB 2.0 hubs.  Without this, only one transfer will be
	  issued in each microframe, significantly reducing the number of
	  periodic low/fullspeed transfers possible.

	  If you have multiple periodic low/fullspeed devices connected to a
	  highspeed USB hub which is connected to a highspeed USB Host
	  Controller, and some of those devices will not work correctly
	  (possibly due to "ENOSPC" or "-28" errors), say Y.  Conversely, if
	  you have only one such device and it doesn't work, you could try
	  saying N.

	  If unsure, say Y.

config USB_FSL_MPH_DR_OF
	tristate

if USB_EHCI_HCD

config USB_EHCI_PCI
	tristate
	depends on PCI
	default y

config USB_EHCI_HCD_PMC_MSP
	tristate "EHCI support for on-chip PMC MSP71xx USB controller"
	depends on MSP_HAS_USB
	default n
	select USB_EHCI_BIG_ENDIAN_DESC
	select USB_EHCI_BIG_ENDIAN_MMIO
	---help---
		Enables support for the onchip USB controller on the PMC_MSP7100 Family SoC's.
		If unsure, say N.

config XPS_USB_HCD_XILINX
	bool "Use Xilinx usb host EHCI controller core"
	depends on (PPC32 || MICROBLAZE)
	select USB_EHCI_BIG_ENDIAN_DESC
	select USB_EHCI_BIG_ENDIAN_MMIO
	---help---
		Xilinx xps USB host controller core is EHCI compliant and has
		transaction translator built-in. It can be configured to either
		support both high speed and full speed devices, or high speed
		devices only.

config USB_EHCI_FSL
	bool "Support for Freescale PPC on-chip EHCI USB controller"
	depends on FSL_SOC
	select USB_EHCI_ROOT_HUB_TT
	select USB_FSL_MPH_DR_OF if OF
	---help---
	  Variation of ARC USB block used in some Freescale chips.

config USB_EHCI_MXC
	tristate "Support for Freescale i.MX on-chip EHCI USB controller"
	depends on ARCH_MXC
	select USB_EHCI_ROOT_HUB_TT
	---help---
	  Variation of ARC USB block used in some Freescale chips.

config USB_EHCI_HCD_OMAP
	tristate "EHCI support for OMAP3 and later chips"
	depends on ARCH_OMAP
	select NOP_USB_XCEIV
	default y
	---help---
	  Enables support for the on-chip EHCI controller on
	  OMAP3 and later chips.

config USB_EHCI_HCD_ORION
	tristate  "Support for Marvell EBU on-chip EHCI USB controller"
	depends on USB_EHCI_HCD && PLAT_ORION
	default y
	---help---
	  Enables support for the on-chip EHCI controller on Marvell's
	  embedded ARM SoCs, including Orion, Kirkwood, Dove, Armada XP,
	  Armada 370.  This is different from the EHCI implementation
	  on Marvell's mobile PXA and MMP SoC, see "EHCI support for
	  Marvell PXA/MMP USB controller" for those.

config USB_EHCI_HCD_SPEAR
        tristate "Support for ST SPEAr on-chip EHCI USB controller"
        depends on USB_EHCI_HCD && PLAT_SPEAR
        default y
        ---help---
          Enables support for the on-chip EHCI controller on
          ST SPEAr chips.

config USB_EHCI_HCD_STI
	tristate "Support for ST STiHxxx on-chip EHCI USB controller"
	depends on ARCH_STI && OF
	select GENERIC_PHY
	select USB_EHCI_HCD_PLATFORM
	help
	  Enable support for the on-chip EHCI controller found on
	  STMicroelectronics consumer electronics SoC's.

config USB_EHCI_HCD_AT91
        tristate  "Support for Atmel on-chip EHCI USB controller"
        depends on USB_EHCI_HCD && ARCH_AT91
        default y
        ---help---
          Enables support for the on-chip EHCI controller on
          Atmel chips.

config USB_EHCI_MSM
	tristate "Support for Qualcomm QSD/MSM on-chip EHCI USB controller"
	depends on ARCH_MSM || ARCH_QCOM
	select USB_EHCI_ROOT_HUB_TT
	---help---
	  Enables support for the USB Host controller present on the
	  Qualcomm chipsets. Root Hub has inbuilt TT.
	  This driver depends on OTG driver for PHY initialization,
	  clock management, powering up VBUS, and power management.
	  This driver is not supported on boards like trout which
	  has an external PHY.

config USB_EHCI_TEGRA
       tristate "NVIDIA Tegra HCD support"
       depends on ARCH_TEGRA
       select USB_EHCI_ROOT_HUB_TT
       select USB_PHY
       help
         This driver enables support for the internal USB Host Controllers
         found in NVIDIA Tegra SoCs. The controllers are EHCI compliant.

config USB_EHCI_HCD_PPC_OF
	bool "EHCI support for PPC USB controller on OF platform bus"
	depends on PPC_OF
	default y
	---help---
	  Enables support for the USB controller present on the PowerPC
	  OpenFirmware platform bus.

config USB_EHCI_SH
	bool "EHCI support for SuperH USB controller"
	depends on SUPERH
	---help---
	  Enables support for the on-chip EHCI controller on the SuperH.
	  If you use the PCI EHCI controller, this option is not necessary.

config USB_EHCI_EXYNOS
       tristate "EHCI support for Samsung S5P/EXYNOS SoC Series"
       depends on ARCH_S5PV210 || ARCH_EXYNOS
       help
	Enable support for the Samsung Exynos SOC's on-chip EHCI controller.

config USB_EHCI_MV
	bool "EHCI support for Marvell PXA/MMP USB controller"
	depends on (ARCH_PXA || ARCH_MMP)
	select USB_EHCI_ROOT_HUB_TT
	---help---
	  Enables support for Marvell (including PXA and MMP series) on-chip
	  USB SPH and OTG controller. SPH is a single port host, and it can
	  only be EHCI host. OTG is controller that can switch to host mode.
	  Note that this driver will not work on Marvell's other EHCI
	  controller used by the EBU-type SoCs including Orion, Kirkwood,
	  Dova, Armada 370 and Armada XP. See "Support for Marvell EBU
	  on-chip EHCI USB controller" for those.

config USB_W90X900_EHCI
	tristate "W90X900(W90P910) EHCI support"
	depends on ARCH_W90X900
	---help---
		Enables support for the W90X900 USB controller

config USB_CNS3XXX_EHCI
	bool "Cavium CNS3XXX EHCI Module (DEPRECATED)"
	depends on ARCH_CNS3XXX
	select USB_EHCI_HCD_PLATFORM
	---help---
	  This option is deprecated now and the driver was removed, use
	  USB_EHCI_HCD_PLATFORM instead.

	  Enable support for the CNS3XXX SOC's on-chip EHCI controller.
	  It is needed for high-speed (480Mbit/sec) USB 2.0 device
	  support.

config USB_EHCI_ATH79
	bool "EHCI support for AR7XXX/AR9XXX SoCs (DEPRECATED)"
	depends on (SOC_AR71XX || SOC_AR724X || SOC_AR913X || SOC_AR933X)
	select USB_EHCI_ROOT_HUB_TT
	select USB_EHCI_HCD_PLATFORM
	default y
	---help---
	  This option is deprecated now and the driver was removed, use
	  USB_EHCI_HCD_PLATFORM instead.

	  Enables support for the built-in EHCI controller present
	  on the Atheros AR7XXX/AR9XXX SoCs.

config USB_EHCI_HCD_PLATFORM
	tristate "Generic EHCI driver for a platform device"
	default n
	---help---
	  Adds an EHCI host driver for a generic platform device, which
	  provides a memory space and an irq.

	  If unsure, say N.

config USB_OCTEON_EHCI
	bool "Octeon on-chip EHCI support (DEPRECATED)"
	depends on CAVIUM_OCTEON_SOC
	default n
	select USB_EHCI_BIG_ENDIAN_MMIO
	select USB_EHCI_HCD_PLATFORM
	help
	  This option is deprecated now and the driver was removed, use
	  USB_EHCI_HCD_PLATFORM instead.

	  Enable support for the Octeon II SOC's on-chip EHCI
	  controller.  It is needed for high-speed (480Mbit/sec)
	  USB 2.0 device support.  All CN6XXX based chips with USB are
	  supported.

endif # USB_EHCI_HCD

config USB_OXU210HP_HCD
	tristate "OXU210HP HCD support"
	---help---
	  The OXU210HP is an USB host/OTG/device controller. Enable this
	  option if your board has this chip. If unsure, say N.

	  This driver does not support isochronous transfers and doesn't
	  implement OTG nor USB device controllers.

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

config USB_ISP116X_HCD
	tristate "ISP116X HCD support"
	---help---
	  The ISP1160 and ISP1161 chips are USB host controllers. Enable this
	  option if your board has this chip. If unsure, say N.

	  This driver does not support isochronous transfers.

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

config USB_ISP1760_HCD
	tristate "ISP 1760 HCD support"
	---help---
	  The ISP1760 chip is a USB 2.0 host controller.

	  This driver does not support isochronous transfers or OTG.
	  This USB controller is usually attached to a non-DMA-Master
	  capable bus. NXP's eval kit brings this chip on PCI card
	  where the chip itself is behind a PLB to simulate such
	  a bus.

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

config USB_ISP1362_HCD
	tristate "ISP1362 HCD support"
	---help---
	  Supports the Philips ISP1362 chip as a host controller

	  This driver does not support isochronous transfers.

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

config USB_FUSBH200_HCD
	tristate "FUSBH200 HCD support"
	depends on USB
	---help---
	Faraday FUSBH200 is designed to meet USB2.0 EHCI specification
	with minor modification.

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

config USB_FOTG210_HCD
	tristate "FOTG210 HCD support"
	depends on USB
	---help---
	  Faraday FOTG210 is an OTG controller which can be configured as
	  an USB2.0 host. It is designed to meet USB2.0 EHCI specification
	  with minor modification.

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

config USB_MAX3421_HCD
	tristate "MAX3421 HCD (USB-over-SPI) support"
	depends on USB && SPI
	---help---
	  The Maxim MAX3421E chip supports standard USB 2.0-compliant
	  full-speed devices either in host or peripheral mode.  This
	  driver supports the host-mode of the MAX3421E only.

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

config USB_OHCI_HCD
	tristate "OHCI HCD (USB 1.1) support"
	---help---
	  The Open Host Controller Interface (OHCI) is a standard for accessing
	  USB 1.1 host controller hardware.  It does more in hardware than Intel's
	  UHCI specification.  If your USB host controller follows the OHCI spec,
	  say Y.  On most non-x86 systems, and on x86 hardware that's not using a
	  USB controller from Intel or VIA, this is appropriate.  If your host
	  controller doesn't use PCI, this is probably appropriate.  For a PCI
	  based system where you're not sure, the "lspci -v" entry will list the
	  right "prog-if" for your USB controller(s):  EHCI, OHCI, or UHCI.

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

if USB_OHCI_HCD

config USB_OHCI_HCD_OMAP1
	tristate "OHCI support for OMAP1/2 chips"
	depends on ARCH_OMAP1
	depends on ISP1301_OMAP || !(MACH_OMAP_H2 || MACH_OMAP_H3)
	default y
	---help---
	  Enables support for the OHCI controller on OMAP1/2 chips.

config USB_OHCI_HCD_SPEAR
        tristate "Support for ST SPEAr on-chip OHCI USB controller"
        depends on USB_OHCI_HCD && PLAT_SPEAR
        default y
        ---help---
          Enables support for the on-chip OHCI controller on
          ST SPEAr chips.

config USB_OHCI_HCD_STI
	tristate "Support for ST STiHxxx on-chip OHCI USB controller"
	depends on ARCH_STI && OF
	select GENERIC_PHY
	select USB_OHCI_HCD_PLATFORM
	help
	  Enable support for the on-chip OHCI controller found on
	  STMicroelectronics consumer electronics SoC's.

config USB_OHCI_HCD_S3C2410
        tristate "OHCI support for Samsung S3C24xx/S3C64xx SoC series"
        depends on USB_OHCI_HCD && (ARCH_S3C24XX || ARCH_S3C64XX)
        default y
        ---help---
          Enables support for the on-chip OHCI controller on
          S3C24xx/S3C64xx chips.

config USB_OHCI_HCD_LPC32XX
	tristate "Support for LPC on-chip OHCI USB controller"
	depends on USB_OHCI_HCD && ARCH_LPC32XX
	depends on USB_ISP1301
	default y
	---help---
          Enables support for the on-chip OHCI controller on
          NXP chips.

config USB_OHCI_HCD_PXA27X
	tristate "Support for PXA27X/PXA3XX on-chip OHCI USB controller"
	depends on USB_OHCI_HCD && (PXA27x || PXA3xx)
	default y
	---help---
	  Enables support for the on-chip OHCI controller on
	  PXA27x/PXA3xx chips.

config USB_OHCI_HCD_AT91
        tristate "Support for Atmel on-chip OHCI USB controller"
        depends on USB_OHCI_HCD && ARCH_AT91
        default y
        ---help---
          Enables support for the on-chip OHCI controller on
          Atmel chips.

config USB_OHCI_HCD_OMAP3
	tristate "OHCI support for OMAP3 and later chips"
	depends on (ARCH_OMAP3 || ARCH_OMAP4)
	default y
	---help---
	  Enables support for the on-chip OHCI controller on
	  OMAP3 and later chips.

config USB_OHCI_HCD_DAVINCI
	bool "OHCI support for TI DaVinci DA8xx"
	depends on ARCH_DAVINCI_DA8XX
	depends on USB_OHCI_HCD=y
	default y
	help
	  Enables support for the DaVinci DA8xx integrated OHCI
	  controller. This driver cannot currently be a loadable
	  module because it lacks a proper PHY abstraction.

config USB_OHCI_ATH79
	bool "USB OHCI support for the Atheros AR71XX/AR7240 SoCs (DEPRECATED)"
	depends on (SOC_AR71XX || SOC_AR724X)
	select USB_OHCI_HCD_PLATFORM
	default y
	help
	  This option is deprecated now and the driver was removed, use
	  USB_OHCI_HCD_PLATFORM instead.

	  Enables support for the built-in OHCI controller present on the
	  Atheros AR71XX/AR7240 SoCs.

config USB_OHCI_HCD_PPC_OF_BE
	bool "OHCI support for OF platform bus (big endian)"
	depends on PPC_OF
	select USB_OHCI_BIG_ENDIAN_DESC
	select USB_OHCI_BIG_ENDIAN_MMIO
	---help---
	  Enables support for big-endian USB controllers present on the
	  OpenFirmware platform bus.

config USB_OHCI_HCD_PPC_OF_LE
	bool "OHCI support for OF platform bus (little endian)"
	depends on PPC_OF
	select USB_OHCI_LITTLE_ENDIAN
	---help---
	  Enables support for little-endian USB controllers present on the
	  OpenFirmware platform bus.

config USB_OHCI_HCD_PPC_OF
	bool
	depends on PPC_OF
	default USB_OHCI_HCD_PPC_OF_BE || USB_OHCI_HCD_PPC_OF_LE

config USB_OHCI_HCD_PCI
	tristate "OHCI support for PCI-bus USB controllers"
	depends on PCI
	default y
	select USB_OHCI_LITTLE_ENDIAN
	---help---
	  Enables support for PCI-bus plug-in USB controller cards.
	  If unsure, say Y.

config USB_OHCI_HCD_SSB
	bool "OHCI support for Broadcom SSB OHCI core (DEPRECATED)"
	depends on (SSB = y || SSB = USB_OHCI_HCD)
	select USB_HCD_SSB
	select USB_OHCI_HCD_PLATFORM
	default n
	---help---
	  This option is deprecated now and the driver was removed, use
	  USB_HCD_SSB and USB_OHCI_HCD_PLATFORM instead.

	  Support for the Sonics Silicon Backplane (SSB) attached
	  Broadcom USB OHCI core.

	  This device is present in some embedded devices with
	  Broadcom based SSB bus.

	  If unsure, say N.

config USB_OHCI_SH
	bool "OHCI support for SuperH USB controller (DEPRECATED)"
	depends on SUPERH
	select USB_OHCI_HCD_PLATFORM
	---help---
	  This option is deprecated now and the driver was removed, use
	  USB_OHCI_HCD_PLATFORM instead.

	  Enables support for the on-chip OHCI controller on the SuperH.
	  If you use the PCI OHCI controller, this option is not necessary.

config USB_OHCI_EXYNOS
	tristate "OHCI support for Samsung S5P/EXYNOS SoC Series"
	depends on ARCH_S5PV210 || ARCH_EXYNOS
	help
	 Enable support for the Samsung Exynos SOC's on-chip OHCI controller.

config USB_CNS3XXX_OHCI
	bool "Cavium CNS3XXX OHCI Module (DEPRECATED)"
	depends on ARCH_CNS3XXX
	select USB_OHCI_HCD_PLATFORM
	---help---
	  This option is deprecated now and the driver was removed, use
	  USB_OHCI_HCD_PLATFORM instead.

	  Enable support for the CNS3XXX SOC's on-chip OHCI controller.
	  It is needed for low-speed USB 1.0 device support.

config USB_OHCI_HCD_PLATFORM
	tristate "Generic OHCI driver for a platform device"
	default n
	---help---
	  Adds an OHCI host driver for a generic platform device, which
	  provides a memory space and an irq.

	  If unsure, say N.

config USB_OCTEON_OHCI
	bool "Octeon on-chip OHCI support (DEPRECATED)"
	depends on CAVIUM_OCTEON_SOC
	default USB_OCTEON_EHCI
	select USB_OHCI_BIG_ENDIAN_MMIO
	select USB_OHCI_LITTLE_ENDIAN
	select USB_OHCI_HCD_PLATFORM
	help
	  This option is deprecated now and the driver was removed, use
	  USB_OHCI_HCD_PLATFORM instead.

	  Enable support for the Octeon II SOC's on-chip OHCI
	  controller.  It is needed for low-speed USB 1.0 device
	  support.  All CN6XXX based chips with USB are supported.

endif # USB_OHCI_HCD

config USB_UHCI_HCD
	tristate "UHCI HCD (most Intel and VIA) support"
	depends on PCI || USB_UHCI_SUPPORT_NON_PCI_HC
	---help---
	  The Universal Host Controller Interface is a standard by Intel for
	  accessing the USB hardware in the PC (which is also called the USB
	  host controller). If your USB host controller conforms to this
	  standard, you may want to say Y, but see below. All recent boards
	  with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
	  i810, i820) conform to this standard. Also all VIA PCI chipsets
	  (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
	  133) and LEON/GRLIB SoCs with the GRUSBHC controller.
	  If unsure, say Y.

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

config USB_UHCI_SUPPORT_NON_PCI_HC
	bool
	default y if (SPARC_LEON || USB_UHCI_PLATFORM)

config USB_UHCI_PLATFORM
	bool
	default y if ARCH_VT8500

config USB_UHCI_BIG_ENDIAN_MMIO
	bool
	default y if SPARC_LEON

config USB_UHCI_BIG_ENDIAN_DESC
	bool
	default y if SPARC_LEON

config USB_FHCI_HCD
	tristate "Freescale QE USB Host Controller support"
	depends on OF_GPIO && QE_GPIO && QUICC_ENGINE
	select FSL_GTM
	select QE_USB
	help
	  This driver enables support for Freescale QE USB Host Controller
	  (as found on MPC8360 and MPC8323 processors), the driver supports
	  Full and Low Speed USB.

config FHCI_DEBUG
	bool "Freescale QE USB Host Controller debug support"
	depends on USB_FHCI_HCD && DEBUG_FS
	help
	  Say "y" to see some FHCI debug information and statistics
	  through debugfs.

config USB_U132_HCD
	tristate "Elan U132 Adapter Host Controller"
	depends on USB_FTDI_ELAN
	help
	  The U132 adapter is a USB to CardBus adapter specifically designed
	  for PC cards that contain an OHCI host controller. Typical PC cards
	  are the Orange Mobile 3G Option GlobeTrotter Fusion card. The U132
	  adapter will *NOT* work with PC cards that do not contain an OHCI
	  controller.

	  For those PC cards that contain multiple OHCI controllers only the
	  first one is used.

	  The driver consists of two modules, the "ftdi-elan" module is a
	  USB client driver that interfaces to the FTDI chip within ELAN's
	  USB-to-PCMCIA adapter, and this "u132-hcd" module is a USB host
	  controller driver that talks to the OHCI controller within the
	  CardBus cards that are inserted in the U132 adapter.

	  This driver has been tested with a CardBus OHCI USB adapter, and
	  worked with a USB PEN Drive inserted into the first USB port of
	  the PCCARD. A rather pointless thing to do, but useful for testing.

	  It is safe to say M here.

	  See also <http://www.elandigitalsystems.com/support/ufaq/u132linux.php>

config USB_SL811_HCD
	tristate "SL811HS HCD support"
	help
	  The SL811HS is a single-port USB controller that supports either
	  host side or peripheral side roles.  Enable this option if your
	  board has this chip, and you want to use it as a host controller. 
	  If unsure, say N.

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

config USB_SL811_HCD_ISO
	bool "partial ISO support"
	depends on USB_SL811_HCD
	help
	  The driver doesn't support iso_frame_desc (yet), but for some simple
	  devices that just queue one ISO frame per URB, then ISO transfers
	  "should" work using the normal urb status fields.

	  If unsure, say N.

config USB_SL811_CS
	tristate "CF/PCMCIA support for SL811HS HCD"
	depends on USB_SL811_HCD && PCMCIA
	help
	  Wraps a PCMCIA driver around the SL811HS HCD, supporting the RATOC
	  REX-CFU1U CF card (often used with PDAs).  If unsure, say N.

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

config USB_R8A66597_HCD
	tristate "R8A66597 HCD support"
	help
	  The R8A66597 is a USB 2.0 host and peripheral controller.

	  Enable this option if your board has this chip, and you want
	  to use it as a host controller.  If unsure, say N.

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

config USB_RENESAS_USBHS_HCD
	tristate "Renesas USBHS HCD support"
	depends on USB_RENESAS_USBHS
	help
	  The Renesas USBHS is a USB 2.0 host and peripheral controller.

	  Enable this option if your board has this chip, and you want
	  to use it as a host controller.  If unsure, say N.

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

config USB_WHCI_HCD
	tristate "Wireless USB Host Controller Interface (WHCI) driver"
	depends on PCI && USB && UWB
	select USB_WUSB
	select UWB_WHCI
	help
	  A driver for PCI-based Wireless USB Host Controllers that are
	  compliant with the WHCI specification.

	  To compile this driver a module, choose M here: the module
	  will be called "whci-hcd".

config USB_HWA_HCD
	tristate "Host Wire Adapter (HWA) driver"
	depends on USB && UWB
	select USB_WUSB
	select UWB_HWA
	help
	  This driver enables you to connect Wireless USB devices to
	  your system using a Host Wire Adaptor USB dongle. This is an
	  UWB Radio Controller and WUSB Host Controller connected to
	  your machine via USB (specified in WUSB1.0).

	  To compile this driver a module, choose M here: the module
	  will be called "hwa-hc".

config USB_IMX21_HCD
       tristate "i.MX21 HCD support"
       depends on ARM && ARCH_MXC
       help
         This driver enables support for the on-chip USB host in the
         i.MX21 processor.

         To compile this driver as a module, choose M here: the
         module will be called "imx21-hcd".

config USB_HCD_BCMA
	tristate "BCMA usb host driver"
	depends on BCMA
	select USB_OHCI_HCD_PLATFORM if USB_OHCI_HCD
	select USB_EHCI_HCD_PLATFORM if USB_EHCI_HCD
	help
	  Enable support for the EHCI and OCHI host controller on an bcma bus.
	  It converts the bcma driver into two platform device drivers
	  for ehci and ohci.

	  If unsure, say N.

config USB_HCD_SSB
	tristate "SSB usb host driver"
	depends on SSB
	select USB_OHCI_HCD_PLATFORM if USB_OHCI_HCD
	select USB_EHCI_HCD_PLATFORM if USB_EHCI_HCD
	help
	  Enable support for the EHCI and OCHI host controller on an bcma bus.
	  It converts the bcma driver into two platform device drivers
	  for ehci and ohci.

	  If unsure, say N.

config USB_HCD_TEST_MODE
	bool "HCD test mode support"
	---help---
	  Say 'Y' to enable additional software test modes that may be
	  supported by the host controller drivers.

	  One such test mode is the Embedded High-speed Host Electrical Test
	  (EHSET) for EHCI host controller hardware, specifically the "Single
	  Step Set Feature" test.  Typically this will be enabled for On-the-Go
	  or embedded hosts that need to undergo USB-IF compliance testing with
	  the aid of special testing hardware.  In the future, this may expand
	  to include other tests that require support from a HCD driver.

	  This option is of interest only to developers who need to validate
	  their USB hardware designs.  It is not needed for normal use.  If
	  unsure, say N.
