#
# 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_BIG_ENDIAN_32BIT_BYTE_SWAPPER
	bool
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This option is selected by drivers running on big endian hosts
	  and performing I/O to a SDHCI controller through a bus that
	  implements a hardware byte swapper using a 32-bit datum.
	  This endian mapping mode is called "data invariance" and
	  has the effect of scrambling the addresses and formats of data
	  accessed in sizes other than the datum size.

	  This is the case for the Freescale eSDHC and Nintendo Wii SDHCI.

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
	bool "Ricoh MMC Controller Disabler  (EXPERIMENTAL)"
	depends on MMC_SDHCI_PCI
	help
	  This adds a pci quirk to disable 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 even if you don't
	  have a Ricoh based card reader.

	  If unsure, say Y.

config MMC_SDHCI_OF
	tristate "SDHCI support on OpenFirmware platforms"
	depends on MMC_SDHCI && OF
	help
	  This selects the OF support for Secure Digital Host Controller
	  Interfaces.

	  If unsure, say N.

config MMC_SDHCI_OF_ESDHC
	bool "SDHCI OF support for the Freescale eSDHC controller"
	depends on MMC_SDHCI_OF
	depends on PPC_OF
	select MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER
	help
	  This selects the Freescale eSDHC controller support.

	  If unsure, say N.

config MMC_SDHCI_OF_HLWD
	bool "SDHCI OF support for the Nintendo Wii SDHCI controllers"
	depends on MMC_SDHCI_OF
	depends on PPC_OF
	select MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  found in the "Hollywood" chipset of the Nintendo Wii video game
	  console.

	  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_CNS3XXX
	bool "SDHCI support on the Cavium Networks CNS3xxx SoC"
	depends on ARCH_CNS3XXX
	depends on MMC_SDHCI_PLTFM
	help
	  This selects the SDHCI support for CNS3xxx System-on-Chip devices.

	  If unsure, say N.

config MMC_SDHCI_ESDHC_IMX
	bool "SDHCI platform support for the Freescale eSDHC i.MX controller"
	depends on MMC_SDHCI_PLTFM && (ARCH_MX25 || ARCH_MX35 || ARCH_MX5)
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Freescale eSDHC controller support on the platform
	  bus, found on platforms like mx35/51.

	  If unsure, say N.

config MMC_SDHCI_DOVE
	bool "SDHCI support on Marvell's Dove SoC"
	depends on ARCH_DOVE
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Secure Digital Host Controller Interface in
	  Marvell's Dove SoC.

	  If unsure, say N.

config MMC_SDHCI_TEGRA
	tristate "SDHCI platform support for the Tegra SD/MMC Controller"
	depends on MMC_SDHCI_PLTFM && ARCH_TEGRA
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Tegra SD/MMC controller. If you have a Tegra
	  platform with SD or MMC devices, 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_SAMSUNG
	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_PXA
	tristate "Marvell PXA168/PXA910/MMP2 SD Host Controller support"
	depends on ARCH_PXA || ARCH_MMP
	select MMC_SDHCI
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Marvell(R) PXA168/PXA910/MMP2 SD Host Controller.
	  If you have a PXA168/PXA910/MMP2 platform with SD Host Controller
	  and a card slot, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_SPEAR
	tristate "SDHCI support on ST SPEAr platform"
	depends on MMC_SDHCI && PLAT_SPEAR
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  often referrered to as the HSMMC block in some of the ST SPEAR range
	  of SoC

	  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 SOC_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"
	depends on AVR32 || ARCH_AT91
	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 || ARCH_AT91SAM9G45) && 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_MSM
	tristate "Qualcomm SDCC Controller Support"
	depends on MMC && ARCH_MSM
	help
	  This provides support for the SD/MMC cell found in the
	  MSM and QSD SOCs from Qualcomm. The controller also has
	  support for SDIO devices.

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_DAVINCI
        tristate "TI DAVINCI Multimedia Card Interface support"
        depends on ARCH_DAVINCI
        help
          This selects the TI DAVINCI Multimedia card Interface.
          If you have an DAVINCI board with a Multimedia Card slot,
          say Y or M here.  If unsure, say N.

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_S3C_HW_SDIO_IRQ
       bool "Hardware support for SDIO IRQ"
       depends on MMC_S3C
       help
         Enable the hardware support for SDIO interrupts instead of using
	 the generic polling code.

choice
	prompt "Samsung S3C SD/MMC transfer code"
	depends on MMC_S3C

config MMC_S3C_PIO
	bool "Use PIO transfers only"
	help
	  Use PIO to transfer data between memory and the hardware.

	  PIO is slower than DMA as it requires CPU instructions to
	  move the data. This has been the traditional default for
	  the S3C MCI driver.

config MMC_S3C_DMA
	bool "Use DMA transfers only (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	help
	  Use DMA to transfer data between memory and the hardare.

	  Currently, the DMA support in this driver seems to not be
	  working properly and needs to be debugged before this
	  option is useful.

config MMC_S3C_PIODMA
	bool "Support for both PIO and DMA (EXPERIMENTAL)"
	help
	  Compile both the PIO and DMA transfer routines into the
	  driver and let the platform select at run-time which one
	  is best.

	  See notes for the DMA option.

endchoice

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 || MFD_SH_MOBILE_SDHI
	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 MISC_DEVICES
	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.

config SDH_BFIN
	tristate "Blackfin Secure Digital Host support"
	depends on (BF54x && !BF544) || (BF51x && !BF512)
	help
	  If you say yes here you will get support for the Blackfin on-chip
	  Secure Digital Host interface.  This includes support for MMC and
	  SD cards.

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

	  If unsure, say N.

config SDH_BFIN_MISSING_CMD_PULLUP_WORKAROUND
	bool "Blackfin EZkit Missing SDH_CMD Pull Up Resistor Workaround"
	depends on SDH_BFIN
	help
	  If you say yes here SD-Cards may work on the EZkit.

config MMC_DW
	tristate "Synopsys DesignWare Memory Card Interface"
	depends on ARM
	help
	  This selects support for the Synopsys DesignWare Mobile Storage IP
	  block, this provides host support for SD and MMC interfaces, in both
	  PIO and external DMA modes.

config MMC_DW_IDMAC
	bool "Internal DMAC interface"
	depends on MMC_DW
	help
	  This selects support for the internal DMAC block within the Synopsys
	  Designware Mobile Storage IP block. This disables the external DMA
	  interface.

config MMC_SH_MMCIF
	tristate "SuperH Internal MMCIF support"
	depends on MMC_BLOCK && (SUPERH || ARCH_SHMOBILE)
	help
	  This selects the MMC Host Interface controller (MMCIF).

	  This driver supports MMCIF in sh7724/sh7757/sh7372.

config MMC_JZ4740
	tristate "JZ4740 SD/Multimedia Card Interface support"
	depends on MACH_JZ4740
	help
	  This selects support for the SD/MMC controller on Ingenic JZ4740
	  SoCs.
	  If you have a board based on such a SoC and with a SD/MMC slot,
	  say Y or M here.

config MMC_USHC
	tristate "USB SD Host Controller (USHC) support"
	depends on USB
	help
	  This selects support for USB SD Host Controllers based on
	  the Cypress Astoria chip with firmware compliant with CSR's
	  USB SD Host Controller specification (CS-118793-SP).

	  CSR boards with this device include: USB<>SDIO (M1985v2),
	  and Ultrasira.

	  Note: These controllers only support SDIO cards and do not
	  support MMC or SD memory cards.
