#
# MMC/SD host controller drivers
#

comment "MMC/SD/SDIO Host Controller Drivers"

config MMC_DEBUG
	bool "MMC host drivers debugging"
	depends on MMC != n
	help
	  This is an option for use by developers; most people should
	  say N here. This enables MMC host driver debugging. And further
	  added host drivers please don't invent their private macro for
	  debugging.

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_QCOM_DML
	bool "Qualcomm Data Mover for SD Card Controller"
	depends on MMC_ARMMMCI && QCOM_BAM_DMA
	default y
	help
	  This selects the Qualcomm Data Mover lite/local on SD Card controller.
	  This option will enable the dma to work correctly, if you are using
	  Qcom SOCs and MMC, you would probably need this option to get DMA working.

	  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
	depends on MMC_SDHCI
	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 Nintendo Wii SDHCI.

config MMC_SDHCI_PCI
	tristate "SDHCI support on PCI bus"
	depends on MMC_SDHCI && PCI
	select MMC_CQHCI
	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"
	depends on MMC_SDHCI_PCI
	default y
	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_ACPI
	tristate "SDHCI support for ACPI enumerated SDHCI controllers"
	depends on MMC_SDHCI && ACPI
	select IOSF_MBI if X86
	help
	  This selects support for ACPI enumerated SDHCI controllers,
	  identified by ACPI Compatibility ID PNP0D40 or specific
	  ACPI Hardware IDs.

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

	  If unsure, say N.

config MMC_SDHCI_PLTFM
	tristate "SDHCI platform and OF driver helper"
	depends on MMC_SDHCI
	help
	  This selects the common helper functions support for Secure Digital
	  Host Controller Interface based platform and OF drivers.

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

	  If unsure, say N.

config MMC_SDHCI_OF_ARASAN
	tristate "SDHCI OF support for the Arasan SDHCI controllers"
	depends on MMC_SDHCI_PLTFM
	depends on OF
	depends on COMMON_CLK
	select MMC_CQHCI
	help
	  This selects the Arasan Secure Digital Host Controller Interface
	  (SDHCI). This hardware is found e.g. in Xilinx' Zynq SoC.

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

	  If unsure, say N.

config MMC_SDHCI_OF_AT91
	tristate "SDHCI OF support for the Atmel SDMMC controller"
	depends on MMC_SDHCI_PLTFM
	depends on OF
	help
	  This selects the Atmel SDMMC driver

config MMC_SDHCI_OF_ESDHC
	tristate "SDHCI OF support for the Freescale eSDHC controller"
	depends on MMC_SDHCI_PLTFM
	depends on PPC || ARCH_MXC || ARCH_LAYERSCAPE
	select MMC_SDHCI_IO_ACCESSORS
	select FSL_GUTS
	help
	  This selects the Freescale eSDHC controller support.

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

	  If unsure, say N.

config MMC_SDHCI_OF_HLWD
	tristate "SDHCI OF support for the Nintendo Wii SDHCI controllers"
	depends on MMC_SDHCI_PLTFM
	depends on PPC
	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 you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_OF_DWCMSHC
	tristate "SDHCI OF support for the Synopsys DWC MSHC"
	depends on MMC_SDHCI_PLTFM
	depends on OF
	depends on COMMON_CLK
	help
	  This selects Synopsys DesignWare Cores Mobile Storage Controller
	  support.
	  If you have a controller with this interface, say Y or M here.
	  If unsure, say N.

config MMC_SDHCI_CADENCE
	tristate "SDHCI support for the Cadence SD/SDIO/eMMC controller"
	depends on MMC_SDHCI_PLTFM
	depends on OF
	help
	  This selects the Cadence SD/SDIO/eMMC driver.

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

	  If unsure, say N.

config MMC_SDHCI_CNS3XXX
	tristate "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 you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_ESDHC_IMX
	tristate "SDHCI support for the Freescale eSDHC/uSDHC i.MX controller"
	depends on ARCH_MXC
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Freescale eSDHC/uSDHC controller support
	  found on i.MX25, i.MX35 i.MX5x and i.MX6x.

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

	  If unsure, say N.

config MMC_SDHCI_DOVE
	tristate "SDHCI support on Marvell's Dove SoC"
	depends on ARCH_DOVE || MACH_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 you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_TEGRA
	tristate "SDHCI platform support for the Tegra SD/MMC Controller"
	depends on ARCH_TEGRA
	depends on MMC_SDHCI_PLTFM
	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.

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

	  If unsure, say N.

config MMC_SDHCI_SIRF
	tristate "SDHCI support on CSR SiRFprimaII and SiRFmarco SoCs"
	depends on ARCH_SIRF
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the SDHCI support for SiRF System-on-Chip devices.

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

	  If unsure, say N.

config MMC_SDHCI_PXAV3
	tristate "Marvell MMP2 SD Host Controller support (PXAV3)"
	depends on CLKDEV_LOOKUP
	depends on MMC_SDHCI_PLTFM
	depends on ARCH_BERLIN || ARCH_MMP || ARCH_MVEBU || COMPILE_TEST
	default CPU_MMP2
	help
	  This selects the Marvell(R) PXAV3 SD Host Controller.
	  If you have a MMP2 platform with SD Host Controller
	  and a card slot, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_PXAV2
	tristate "Marvell PXA9XX SD Host Controller support (PXAV2)"
	depends on CLKDEV_LOOKUP
	depends on MMC_SDHCI_PLTFM
	depends on ARCH_MMP || COMPILE_TEST
	default CPU_PXA910
	help
	  This selects the Marvell(R) PXAV2 SD Host Controller.
	  If you have a PXA9XX 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
	depends on OF
	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
	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_SDHCI_BCM_KONA
	tristate "SDHCI support on Broadcom KONA platform"
	depends on ARCH_BCM_MOBILE
	depends on MMC_SDHCI_PLTFM
	help
	  This selects the Broadcom Kona Secure Digital Host Controller
	  Interface(SDHCI) support.
	  This is used in Broadcom mobile SoCs.

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

config MMC_SDHCI_F_SDH30
	tristate "SDHCI support for Fujitsu Semiconductor F_SDH30"
	depends on MMC_SDHCI_PLTFM
	depends on OF || ACPI
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  Needed by some Fujitsu SoC for MMC / SD / SDIO support.
	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_IPROC
	tristate "SDHCI support for the BCM2835 & iProc SD/MMC Controller"
	depends on ARCH_BCM2835 || ARCH_BCM_IPROC || COMPILE_TEST
	depends on MMC_SDHCI_PLTFM
	default ARCH_BCM_IPROC
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the iProc SD/MMC controller.

	  If you have a BCM2835 or IPROC platform with SD or MMC devices,
	  say Y or M here.

	  If unsure, say N.

config MMC_MESON_GX
	tristate "Amlogic S905/GX*/AXG SD/MMC Host Controller support"
	depends on ARCH_MESON && MMC
	help
	  This selects support for the Amlogic SD/MMC Host Controller
	  found on the S905/GX*/AXG family of SoCs.  This controller is
	  MMC 5.1 compliant and supports SD, eMMC and SDIO interfaces.

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

config MMC_MESON_MX_SDIO
	tristate "Amlogic Meson6/Meson8/Meson8b SD/MMC Host Controller support"
	depends on ARCH_MESON || COMPILE_TEST
	depends on COMMON_CLK
	depends on OF
	help
	  This selects support for the SD/MMC Host Controller on
	  Amlogic Meson6, Meson8 and Meson8b SoCs.

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

config MMC_MOXART
	tristate "MOXART SD/MMC Host Controller support"
	depends on ARCH_MOXART && MMC
	help
	  This selects support for the MOXART SD/MMC Host Controller.
	  MOXA provides one multi-functional card reader which can
	  be found on some embedded hardware such as UC-7112-LX.
	  If you have a controller with this interface, say Y here.

config MMC_SDHCI_ST
	tristate "SDHCI support on STMicroelectronics SoC"
	depends on ARCH_STI || FSP2
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Secure Digital Host Controller Interface in
	  STMicroelectronics SoCs.

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

config MMC_OMAP
	tristate "TI OMAP Multimedia Card Interface support"
	depends on ARCH_OMAP
	depends on TPS65010 || !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_OMAP2PLUS || ARCH_KEYSTONE || COMPILE_TEST
	help
	  This selects the TI OMAP High Speed Multimedia card Interface.
	  If you have an omap2plus 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 MIPS_ALCHEMY
	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_ATMELMCI
	tristate "Atmel SD/MMC Driver (Multimedia Card Interface)"
	depends on ARCH_AT91
	help
	  This selects the Atmel Multimedia Card Interface driver.
	  If you have an AT91 platform with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_SDHCI_MSM
	tristate "Qualcomm SDHCI Controller Support"
	depends on ARCH_QCOM || (ARM && COMPILE_TEST)
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  support present in Qualcomm SOCs. The controller supports
	  SD/MMC/SDIO devices.

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

	  If unsure, say N.

config MMC_MXC
	tristate "Freescale i.MX21/27/31 or MPC512x Multimedia Card support"
	depends on ARCH_MXC || PPC_MPC512x
	help
	  This selects the Freescale i.MX21, i.MX27, i.MX31 or MPC512x
	  Multimedia Card Interface. If you have an i.MX or MPC512x platform
	  with a Multimedia Card slot, say Y or M here.

	  If unsure, say N.

config MMC_MXS
	tristate "Freescale MXS Multimedia Card Interface support"
	depends on ARCH_MXS && MXS_DMA
	help
	  This selects the Freescale SSP MMC controller found on MXS based
	  platforms like mx23/28.

	  If unsure, say N.

config MMC_TIFM_SD
	tristate "TI Flash Media MMC/SD Interface support"
	depends on 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
	depends on OF
	---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_GOLDFISH
	tristate "goldfish qemu Multimedia Card Interface support"
	depends on GOLDFISH || COMPILE_TEST
	help
	  This selects the Goldfish Multimedia card Interface emulation
	  found on the Goldfish Android virtual device emulation.

config MMC_SPI
	tristate "MMC/SD/SDIO over SPI"
	depends on SPI_MASTER && 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_S3C24XX
	depends on S3C24XX_DMAC
	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"
	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.

endchoice

config MMC_SDRICOH_CS
	tristate "MMC/SD driver for Ricoh Bay1Controllers"
	depends on 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_CORE
	tristate

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

config MMC_SDHI
	tristate "Renesas SDHI SD/SDIO controller support"
	depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
	select MMC_TMIO_CORE
	help
	  This provides support for the SDHI SD/SDIO controller found in
	  Renesas SuperH, ARM and ARM64 based SoCs

config MMC_SDHI_SYS_DMAC
	tristate "DMA for SDHI SD/SDIO controllers using SYS-DMAC"
	depends on MMC_SDHI
	default MMC_SDHI if (SUPERH || ARM)
	help
	  This provides DMA support for SDHI SD/SDIO controllers
	  using SYS-DMAC via DMA Engine. This supports the controllers
	  found in SuperH and Renesas ARM based SoCs.

config MMC_SDHI_INTERNAL_DMAC
	tristate "DMA for SDHI SD/SDIO controllers using on-chip bus mastering"
	depends on ARM64 || COMPILE_TEST
	depends on MMC_SDHI
	default MMC_SDHI if ARM64
	help
	  This provides DMA support for SDHI SD/SDIO controllers
	  using on-chip bus mastering. This supports the controllers
	  found in arm64 based SoCs.

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.

config MMC_CAVIUM_OCTEON
	tristate "Cavium OCTEON SD/MMC Card Interface support"
	depends on CAVIUM_OCTEON_SOC
	help
	  This selects Cavium OCTEON SD/MMC card Interface.
	  If you have an OCTEON board with a Multimedia Card slot,
	  say Y or M here.

	  If unsure, say N.

config MMC_CAVIUM_THUNDERX
	tristate "Cavium ThunderX SD/MMC Card Interface support"
	depends on PCI && 64BIT && (ARM64 || COMPILE_TEST)
	depends on GPIO_THUNDERX
	depends on OF_ADDRESS
	help
	  This selects Cavium ThunderX SD/MMC Card Interface.
	  If you have an Cavium ARM64 board with a Multimedia Card slot
	  or builtin eMMC chip say Y or M here. If built as a module
	  the module will be called thunderx_mmc.ko.

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

config MMC_DW_PLTFM
	tristate "Synopsys Designware MCI Support as platform device"
	depends on MMC_DW
	default y
	help
	  This selects the common helper functions support for Host Controller
	  Interface based platform driver. Please select this option if the IP
	  is present as a platform device. This is the common interface for the
	  Synopsys Designware IP.

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

	  If unsure, say Y.

config MMC_DW_BLUEFIELD
	tristate "BlueField specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW
	select MMC_DW_PLTFM
	help
	  This selects support for Mellanox BlueField SoC specific extensions to
	  the Synopsys DesignWare Memory Card Interface driver. Select this
	  option for platforms based on Mellanox BlueField SoC's.

config MMC_DW_EXYNOS
	tristate "Exynos specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW
	select MMC_DW_PLTFM
	help
	  This selects support for Samsung Exynos SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Exynos4 and Exynos5 SoC's.

config MMC_DW_HI3798CV200
	tristate "Hi3798CV200 specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW
	select MMC_DW_PLTFM
	help
	  This selects support for HiSilicon Hi3798CV200 SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on HiSilicon Hi3798CV200 SoC.

config MMC_DW_K3
	tristate "K3 specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW
	select MMC_DW_PLTFM
	help
	  This selects support for Hisilicon K3 SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on Hisilicon K3 SoC's.

config MMC_DW_PCI
	tristate "Synopsys Designware MCI support on PCI bus"
	depends on MMC_DW && PCI
	help
	  This selects the PCI bus for the Synopsys Designware Mobile Storage IP.
	  Select this option if the IP is present on PCI platform.

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

	  If unsure, say N.

config MMC_DW_ROCKCHIP
	tristate "Rockchip specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW && ARCH_ROCKCHIP
	select MMC_DW_PLTFM
	help
	  This selects support for Rockchip SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on RK3066, RK3188 and RK3288 SoC's.

config MMC_DW_ZX
	tristate "ZTE specific extensions for Synopsys DW Memory Card Interface"
	depends on MMC_DW && ARCH_ZX
	select MMC_DW_PLTFM
	help
	  This selects support for ZTE SoC specific extensions to the
	  Synopsys DesignWare Memory Card Interface driver. Select this option
	  for platforms based on ZX296718 SoC's.

config MMC_SH_MMCIF
	tristate "SuperH Internal MMCIF support"
	depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
	help
	  This selects the MMC Host Interface controller (MMCIF) found in various
	  Renesas SoCs for SH and ARM architectures.


config MMC_JZ4740
	tristate "Ingenic JZ47xx SD/Multimedia Card Interface support"
	depends on MACH_JZ4740 || MACH_JZ4780
	help
	  This selects support for the SD/MMC controller on Ingenic
	  JZ4740, JZ4750, JZ4770 and JZ4780 SoCs.

	  If you have a board based on such a SoC and with a SD/MMC slot,
	  say Y or M here.

config MMC_VUB300
	tristate "VUB300 USB to SDIO/SD/MMC Host Controller support"
	depends on USB
	help
	  This selects support for Elan Digital Systems' VUB300 chip.

	  The VUB300 is a USB-SDIO Host Controller Interface chip
	  that enables the host computer to use SDIO/SD/MMC cards
	  via a USB 2.0 or USB 1.1 host.

	  The VUB300 chip will be found in both physically separate
	  USB to SDIO/SD/MMC adapters and embedded on some motherboards.

	  The VUB300 chip supports SD and MMC memory cards in addition
	  to single and multifunction SDIO cards.

	  Some SDIO cards will need a firmware file to be loaded and
	  sent to VUB300 chip in order to achieve better data throughput.
	  Download these "Offload Pseudocode" from Elan Digital Systems'
	  web-site http://www.elandigitalsystems.com/support/downloads.php
	  and put them in /lib/firmware. Note that without these additional
	  firmware files the VUB300 chip will still function, but not at
	  the best obtainable data rate.

	  To compile this mmc host controller driver as a module,
	  choose M here: the module will be called vub300.

	  If you have a computer with an embedded VUB300 chip
	  or if you intend connecting a USB adapter based on a
	  VUB300 chip 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.

config MMC_WMT
	tristate "Wondermedia SD/MMC Host Controller support"
	depends on ARCH_VT8500
	default y
	help
	  This selects support for the SD/MMC Host Controller on
	  Wondermedia WM8505/WM8650 based SoCs.

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

config MMC_USDHI6ROL0
	tristate "Renesas USDHI6ROL0 SD/SDIO Host Controller support"
	depends on HAS_DMA
	help
	  This selects support for the Renesas USDHI6ROL0 SD/SDIO
	  Host Controller

config MMC_REALTEK_PCI
	tristate "Realtek PCI-E SD/MMC Card Interface Driver"
	depends on MISC_RTSX_PCI
	help
	  Say Y here to include driver code to support SD/MMC card interface
	  of Realtek PCI-E card reader

config MMC_REALTEK_USB
	tristate "Realtek USB SD/MMC Card Interface Driver"
	depends on MISC_RTSX_USB
	help
	  Say Y here to include driver code to support SD/MMC card interface
	  of Realtek RTS5129/39 series card reader

config MMC_SUNXI
	tristate "Allwinner sunxi SD/MMC Host Controller support"
	depends on ARCH_SUNXI
	help
	  This selects support for the SD/MMC Host Controller on
	  Allwinner sunxi SoCs.

config MMC_CQHCI
	tristate "Command Queue Host Controller Interface support"
	depends on HAS_DMA
	help
	  This selects the Command Queue Host Controller Interface (CQHCI)
	  support present in host controllers of Qualcomm Technologies, Inc
	  amongst others.
	  This controller supports eMMC devices with command queue support.

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

	  If unsure, say N.

config MMC_TOSHIBA_PCI
	tristate "Toshiba Type A SD/MMC Card Interface Driver"
	depends on PCI

config MMC_BCM2835
	tristate "Broadcom BCM2835 SDHOST MMC Controller support"
	depends on ARCH_BCM2835 || COMPILE_TEST
	help
	  This selects the BCM2835 SDHOST MMC controller. If you have
	  a BCM2835 platform with SD or MMC devices, say Y or M here.

	  Note that the BCM2835 has two SD controllers: The Arasan
	  sdhci controller (supported by MMC_SDHCI_IPROC) and a custom
	  sdhost controller (supported by this driver).

	  If unsure, say N.

config MMC_MTK
	tristate "MediaTek SD/MMC Card Interface support"
	depends on HAS_DMA
	help
	  This selects the MediaTek(R) Secure digital and Multimedia card Interface.
	  If you have a machine with a integrated SD/MMC card reader, say Y or M here.
	  This is needed if support for any SD/SDIO/MMC devices is required.
	  If unsure, say N.

config MMC_SDHCI_MICROCHIP_PIC32
        tristate "Microchip PIC32MZDA SDHCI support"
        depends on MMC_SDHCI && PIC32MZDA && MMC_SDHCI_PLTFM
        help
          This selects the Secure Digital Host Controller Interface (SDHCI)
          for PIC32MZDA platform.

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

          If unsure, say N.
config MMC_SDHCI_BRCMSTB
	tristate "Broadcom SDIO/SD/MMC support"
	depends on ARCH_BRCMSTB || BMIPS_GENERIC
	depends on MMC_SDHCI_PLTFM
	default y
	help
	  This selects support for the SDIO/SD/MMC Host Controller on
	  Broadcom STB SoCs.

	  If unsure, say Y.

config MMC_SDHCI_XENON
	tristate "Marvell Xenon eMMC/SD/SDIO SDHCI driver"
	depends on MMC_SDHCI_PLTFM
	help
	  This selects Marvell Xenon eMMC/SD/SDIO SDHCI.
	  If you have a controller with this interface, say Y or M here.
	  If unsure, say N.

config MMC_SDHCI_OMAP
	tristate "TI SDHCI Controller Support"
	depends on MMC_SDHCI_PLTFM && OF
	select THERMAL
	imply TI_SOC_THERMAL
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  support present in TI's DRA7 SOCs. The controller supports
	  SD/MMC/SDIO devices.

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

	  If unsure, say N.
