#
# 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_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
	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.
