#
# 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 || ARCH_OMAP4
	help
	  This selects the TI OMAP High Speed Multimedia card Interface.
	  If you have an OMAP2430 or OMAP3 board or OMAP4 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.

choice
	prompt "Atmel SD/MMC Driver"
	default MMC_ATMELMCI if AVR32
	help
	  Choose which driver to use for the Atmel MCI Silicon

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 || ARCH_AT91
	help
	  This selects the Atmel Multimedia Card Interface driver. If
	  you have an AT32 (AVR32) or AT91 platform with a Multimedia
	  Card slot, say Y or M here.

	  If unsure, say N.

endchoice

config MMC_ATMELMCI_DMA
	bool "Atmel MCI DMA support (EXPERIMENTAL)"
	depends on MMC_ATMELMCI && AVR32 && 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_MSM7X00A
	tristate "Qualcomm MSM 7X00A SDCC Controller Support"
	depends on MMC && ARCH_MSM
	help
	  This provides support for the SD/MMC cell found in the
          MSM 7X00A controllers from Qualcomm.

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.
