#
# 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_PCI
       tristate
       depends on 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 MT65xx"
	select MFD_SYSCON
	depends on ARCH_MEDIATEK || COMPILE_TEST
	---help---
	  Say 'Y' to enable the support for the xHCI host controller
	  found in Mediatek MT65xx 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 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
	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_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
	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)
	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
	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 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 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"
	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 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.
