#
# 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_STM32_SDMMC
	bool "STMicroelectronics STM32 SDMMC Controller"
	depends on MMC_ARMMMCI
	default y
	help
	  This selects the STMicroelectronics STM32 SDMMC host controller.
	  If you have a STM32 sdmmc host with internal DMA say Y 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
	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 && PCI
	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
	depends on OF || ACPI
	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_ALCOR
	tristate "Alcor Micro/Alcor Link SD/MMC controller"
	depends on MISC_ALCOR_PCI
	help
	  Say Y here to include driver code to support SD/MMC card interface
	  of Alcor Micro PCI-E card reader

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_SDHCI_SPRD
	tristate "Spreadtrum SDIO host Controller"
	depends on ARCH_SPRD
	depends on MMC_SDHCI_PLTFM
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the SDIO Host Controller in Spreadtrum
	  SoCs, this driver supports R11(IP version: R11P0).

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

	  If unsure, say N.

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 || ARCH_R7S9210 || ARCH_R8A77470 || COMPILE_TEST
	depends on MMC_SDHI
	default MMC_SDHI if (ARM64 || ARCH_R7S9210 || ARCH_R8A77470)
	help
	  This provides DMA support for SDHI SD/SDIO controllers
	  using on-chip bus mastering. This supports the controllers
	  found in arm64 based SoCs. This controller is also found in
	  some RZ family SoCs.

config MMC_UNIPHIER
	tristate "UniPhier SD/eMMC Host Controller support"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on OF
	select MMC_TMIO_CORE
	help
	  This provides support for the SD/eMMC controller found in
	  UniPhier SoCs. The eMMC variant of this controller is used
	  only for 32-bit 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 MIPS
	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.

config MMC_SDHCI_AM654
	tristate "Support for the SDHCI Controller in TI's AM654 SOCs"
	depends on MMC_SDHCI_PLTFM && OF
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  support present in TI's AM654 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.
