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

config USB_C67X00_HCD
	tristate "Cypress C67x00 HCD support"
	depends on HAS_IOMEM
	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"
	depends on HAS_DMA && HAS_IOMEM
	---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_DBGCAP
	bool "xHCI support for debug capability"
	depends on TTY
	---help---
	  Say 'Y' to enable the support for the xHCI debug capability. Make
	  sure that your xHCI host supports the extended debug capability and
	  you want a TTY serial device based on the xHCI debug capability
	  before enabling this option. If unsure, say 'N'.

config USB_XHCI_PCI
       tristate
       depends on USB_PCI
       default y

config USB_XHCI_PLATFORM
	tristate "Generic xHCI driver for a platform device"
	select USB_XHCI_RCAR if ARCH_RENESAS
	---help---
	  Adds an xHCI host driver for a generic platform device, which
	  provides a memory space and an irq.
	  It is also a prerequisite for platform specific drivers that
	  implement some extra quirks.

	  If unsure, say N.

config USB_XHCI_MTK
	tristate "xHCI support for MediaTek SoCs"
	select MFD_SYSCON
	depends on (MIPS && SOC_MT7621) || ARCH_MEDIATEK || COMPILE_TEST
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in MediaTek SoCs.
	  If unsure, say N.

config USB_XHCI_MVEBU
	tristate "xHCI support for Marvell Armada 375/38x"
	select USB_XHCI_PLATFORM
	depends on HAS_IOMEM
	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"
	depends on USB_XHCI_PLATFORM
	depends on ARCH_RENESAS || COMPILE_TEST
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in Renesas R-Car ARM SoCs.

config USB_XHCI_TEGRA
	tristate "xHCI support for NVIDIA Tegra SoCs"
	depends on PHY_TEGRA_XUSB
	depends on RESET_CONTROLLER
	select FW_LOADER
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in NVIDIA Tegra124 and later SoCs.

endif # USB_XHCI_HCD

config USB_EHCI_HCD
	tristate "EHCI HCD (USB 2.0) support"
	depends on HAS_DMA && HAS_IOMEM
	---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.

if USB_EHCI_HCD

config USB_EHCI_PCI
	tristate
	depends on USB_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
	tristate "Support for Freescale PPC on-chip EHCI USB controller"
	depends on FSL_SOC
	select USB_EHCI_ROOT_HUB_TT
	---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
	depends on 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 || ARCH_MVEBU)
	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_TEGRA
       tristate "NVIDIA Tegra HCD support"
       depends on ARCH_TEGRA
       select USB_EHCI_ROOT_HUB_TT
       select USB_PHY
	select USB_ULPI
	select USB_ULPI_VIEWPORT
       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
	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 if CPU_BIG_ENDIAN
	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"
	depends on HAS_IOMEM
	---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"
	depends on HAS_IOMEM
	---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_ISP1362_HCD
	tristate "ISP1362 HCD support"
	depends on HAS_IOMEM
	---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_FOTG210_HCD
	tristate "FOTG210 HCD support"
	depends on USB && HAS_DMA && HAS_IOMEM
	---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"
	depends on HAS_DMA && HAS_IOMEM
	---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 && OF
	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 || SOC_OMAP5)
	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 on-chip OHCI controller on
	  OMAP3 and later chips.

config USB_OHCI_HCD_DAVINCI
	tristate "OHCI support for TI DaVinci DA8xx"
	depends on ARCH_DAVINCI_DA8XX
	depends on USB_OHCI_HCD
	select PHY_DA8XX_USB
	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
	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
	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
	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 USB_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 if CPU_BIG_ENDIAN
	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 USB_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 || ARCH_ASPEED)

config USB_UHCI_ASPEED
       bool
       default y if ARCH_ASPEED

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"
	depends on HAS_IOMEM
	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"
	depends on HAS_IOMEM
	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 USB_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.
