#
# MMC/SD host controller drivers
#

comment "MMC/SD 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_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_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_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_IMX
	tristate "Motorola i.MX Multimedia Card Interface support"
	depends on ARCH_IMX
	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_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_SPI
	tristate "MMC/SD over SPI"
	depends on SPI_MASTER && !HIGHMEM && HAS_DMA
	select CRC7
	select CRC_ITU_T
	help
	  Some systems accss MMC/SD cards using a SPI controller instead of
	  using a "native" MMC/SD controller.  This has a disadvantage of
	  being relatively high overhead, but a compensating advantage of
	  working on many systems without dedicated MMC/SD 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
	help
	  This provides support for the SD/MMC cell found in TC6393XB,
	  T7L66XB and also ipaq ASIC3
