#
# MMC/SD host controller drivers
#

comment "MMC/SD/SDIO Host Controller Drivers"

config MMC_ARMMMCI
	tristate "ARM AMBA Multimedia Card Interface support"
	depends on ARM_AMBA
	help
	  This selects the ARM(R) AMBA(R) PrimeCell Multimedia Card
	  Interface (PL180 and PL181) support.  If you have an ARM(R)
	  platform with a Multimedia Card slot, say Y or M here.

	  If unsure, say N.

config MMC_PXA
	tristate "Intel PXA25x/26x/27x Multimedia Card Interface support"
	depends on ARCH_PXA
	help
	  This selects the Intel(R) PXA(R) Multimedia card Interface.
	  If you have a PXA(R) platform with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_SDHCI
	tristate "Secure Digital Host Controller Interface support"
	depends on HAS_DMA
	help
	  This selects the generic Secure Digital Host Controller Interface.
	  It is used by manufacturers such as Texas Instruments(R), Ricoh(R)
	  and Toshiba(R). Most controllers found in laptops are of this type.

	  If you have a controller with this interface, say Y or M here. You
	  also need to enable an appropriate bus interface.

	  If unsure, say N.

config MMC_SDHCI_IO_ACCESSORS
	bool
	depends on MMC_SDHCI
	help
	  This is silent Kconfig symbol that is selected by the drivers that
	  need to overwrite SDHCI IO memory accessors.

config MMC_SDHCI_PCI
	tristate "SDHCI support on PCI bus"
	depends on MMC_SDHCI && PCI
	help
	  This selects the PCI Secure Digital Host Controller Interface.
	  Most controllers found today are PCI devices.

	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_RICOH_MMC
	tristate "Ricoh MMC Controller Disabler  (EXPERIMENTAL)"
	depends on MMC_SDHCI_PCI
	help
	  This selects the disabler for the Ricoh MMC Controller. This
	  proprietary controller is unnecessary because the SDHCI driver
	  supports MMC cards on the SD controller, but if it is not
	  disabled, it will steal the MMC cards away - rendering them
	  useless. It is safe to select this driver even if you don't
	  have a Ricoh based card reader.


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

	  If unsure, say Y.

config MMC_SDHCI_OF
	tristate "SDHCI support on OpenFirmware platforms"
	depends on MMC_SDHCI && PPC_OF
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the OF support for Secure Digital Host Controller
	  Interfaces. So far, only the Freescale eSDHC controller is known
	  to exist on OF platforms.

	  If unsure, say N.

config MMC_SDHCI_PLTFM
	tristate "SDHCI support on the platform specific bus"
	depends on MMC_SDHCI
	help
	  This selects the platform specific bus support for Secure Digital Host
	  Controller Interface.

	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_S3C
	tristate "SDHCI support on Samsung S3C SoC"
	depends on MMC_SDHCI && (PLAT_S3C24XX || PLAT_S3C64XX)
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  often referrered to as the HSMMC block in some of the Samsung S3C
	  range of SoC.

	  Note, due to the problems with DMA, the DMA support is only
	  available with CONFIG_EXPERIMENTAL is selected.

	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_S3C_DMA
	bool "DMA support on S3C SDHCI"
	depends on MMC_SDHCI_S3C && EXPERIMENTAL
	help
	  Enable DMA support on the Samsung S3C SDHCI glue. The DMA
	  has proved to be problematic if the controller encounters
	  certain errors, and thus should be treated with care.

	  YMMV.

config MMC_OMAP
	tristate "TI OMAP Multimedia Card Interface support"
	depends on ARCH_OMAP
	select TPS65010 if MACH_OMAP_H2
	help
	  This selects the TI OMAP Multimedia card Interface.
	  If you have an OMAP board with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_OMAP_HS
	tristate "TI OMAP High Speed Multimedia Card Interface support"
	depends on ARCH_OMAP2430 || ARCH_OMAP3
	help
	  This selects the TI OMAP High Speed Multimedia card Interface.
	  If you have an OMAP2430 or OMAP3 board with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_WBSD
	tristate "Winbond W83L51xD SD/MMC Card Interface support"
	depends on ISA_DMA_API
	help
	  This selects the Winbond(R) W83L51xD Secure digital and
          Multimedia card Interface.
	  If you have a machine with a integrated W83L518D or W83L519D
	  SD/MMC card reader, say Y or M here.

	  If unsure, say N.

config MMC_AU1X
	tristate "Alchemy AU1XX0 MMC Card Interface support"
	depends on SOC_AU1200
	help
	  This selects the AMD Alchemy(R) Multimedia card interface.
	  If you have a Alchemy platform with a MMC slot, say Y or M here.

	  If unsure, say N.

config MMC_AT91
	tristate "AT91 SD/MMC Card Interface support"
	depends on ARCH_AT91
	help
	  This selects the AT91 MCI controller.

	  If unsure, say N.

config MMC_ATMELMCI
	tristate "Atmel Multimedia Card Interface support"
	depends on AVR32
	help
	  This selects the Atmel Multimedia Card Interface driver. If
	  you have an AT32 (AVR32) platform with a Multimedia Card
	  slot, say Y or M here.

	  If unsure, say N.

config MMC_ATMELMCI_DMA
	bool "Atmel MCI DMA support (EXPERIMENTAL)"
	depends on MMC_ATMELMCI && DMA_ENGINE && EXPERIMENTAL
	help
	  Say Y here to have the Atmel MCI driver use a DMA engine to
	  do data transfers and thus increase the throughput and
	  reduce the CPU utilization. Note that this is highly
	  experimental and may cause the driver to lock up.

	  If unsure, say N.

config MMC_IMX
	tristate "Motorola i.MX Multimedia Card Interface support"
	depends on ARCH_MX1
	help
	  This selects the Motorola i.MX Multimedia card Interface.
	  If you have a i.MX platform with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_MXC
	tristate "Freescale i.MX2/3 Multimedia Card Interface support"
	depends on ARCH_MXC
	help
	  This selects the Freescale i.MX2/3 Multimedia card Interface.
	  If you have a i.MX platform with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_TIFM_SD
	tristate "TI Flash Media MMC/SD Interface support  (EXPERIMENTAL)"
	depends on EXPERIMENTAL && PCI
	select TIFM_CORE
	help
	  Say Y here if you want to be able to access MMC/SD cards with
	  the Texas Instruments(R) Flash Media card reader, found in many
	  laptops.
	  This option 'selects' (turns on, enables) 'TIFM_CORE', but you
	  probably also need appropriate card reader host adapter, such as
	  'Misc devices: TI Flash Media PCI74xx/PCI76xx host adapter support
	  (TIFM_7XX1)'.

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

config MMC_MVSDIO
	tristate "Marvell MMC/SD/SDIO host driver"
	depends on PLAT_ORION
	---help---
	  This selects the Marvell SDIO host driver.
	  SDIO may currently be found on the Kirkwood 88F6281 and 88F6192
	  SoC controllers.

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

config MMC_SPI
	tristate "MMC/SD/SDIO over SPI"
	depends on SPI_MASTER && !HIGHMEM && HAS_DMA
	select CRC7
	select CRC_ITU_T
	help
	  Some systems access MMC/SD/SDIO cards using a SPI controller
	  instead of using a "native" MMC/SD/SDIO controller.  This has a
	  disadvantage of being relatively high overhead, but a compensating
	  advantage of working on many systems without dedicated MMC/SD/SDIO
	  controllers.

	  If unsure, or if your system has no SPI master driver, say N.

config MMC_S3C
	tristate "Samsung S3C SD/MMC Card Interface support"
	depends on ARCH_S3C2410
	help
	  This selects a driver for the MCI interface found in
          Samsung's S3C2410, S3C2412, S3C2440, S3C2442 CPUs.
	  If you have a board based on one of those and a MMC/SD
	  slot, say Y or M here.

	  If unsure, say N.

config MMC_SDRICOH_CS
	tristate "MMC/SD driver for Ricoh Bay1Controllers (EXPERIMENTAL)"
	depends on EXPERIMENTAL && PCI && PCMCIA
	help
	  Say Y here if your Notebook reports a Ricoh Bay1Controller PCMCIA
	  card whenever you insert a MMC or SD card into the card slot.

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

config MMC_TMIO
	tristate "Toshiba Mobile IO Controller (TMIO) MMC/SD function support"
	depends on MFD_TMIO || MFD_ASIC3
	help
	  This provides support for the SD/MMC cell found in TC6393XB,
	  T7L66XB and also HTC ASIC3

config MMC_CB710
	tristate "ENE CB710 MMC/SD Interface support"
	depends on PCI
	select CB710_CORE
	help
	  This option enables support for MMC/SD part of ENE CB710/720 Flash
	  memory card reader found in some laptops (ie. some versions of
	  HP Compaq nx9500).

	  This driver can also be built as a module. If so, the module
	  will be called cb710-mmc.

config MMC_VIA_SDMMC
	tristate "VIA SD/MMC Card Reader Driver"
	depends on PCI
	help
	  This selects the VIA SD/MMC Card Reader driver, say Y or M here.
	  VIA provides one multi-functional card reader which integrated into
	  some motherboards manufactured by VIA. This card reader supports
	  SD/MMC/SDHC.
	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.
