# SPDX-License-Identifier: GPL-2.0-only
#
# 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
	select IOSF_MBI if X86
	select MMC_SDHCI_IO_ACCESSORS
	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_ASPEED
	tristate "SDHCI OF support for the ASPEED SDHCI controller"
	depends on MMC_SDHCI_PLTFM
	depends on OF && OF_ADDRESS
	select MMC_SDHCI_IO_ACCESSORS
	help
	  This selects the ASPEED Secure Digital Host Controller Interface.

	  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_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
	select MMC_CQHCI
	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
	select MMC_CQHCI
	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_MILBEAUT
	tristate "SDHCI support for Socionext Milbeaut Serieas using F_SDH30"
	depends on MMC_SDHCI_PLTFM
	depends on OF
	help
	  This selects the Secure Digital Host Controller Interface (SDHCI)
	  Needed by Milbeaut 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
	select MMC_CQHCI
	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
	select REGULATOR
	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
	select MMC_CQHCI
	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
	select MMC_SDHCI_EXTERNAL_DMA if DMA_ENGINE
	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 && REGMAP_MMIO
	select MMC_SDHCI_IO_ACCESSORS
	select MMC_CQHCI
	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.

config MMC_OWL
	tristate "Actions Semi Owl SD/MMC Host Controller support"
	depends on HAS_DMA
	depends on ARCH_ACTIONS || COMPILE_TEST
	help
	  This selects support for the SD/MMC Host Controller on
	  Actions Semi Owl SoCs.

config MMC_SDHCI_EXTERNAL_DMA
	bool
