#
# 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
	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
	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 || ARCH_MXC_ARM64 || COMPILE_TEST
	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
	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
	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* 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* 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_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 HAS_DMA
	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 HAS_DMA
	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 || ARM || ARM64
	depends on SUPERH || ARCH_RENESAS || COMPILE_TEST
	select MMC_TMIO_CORE
	select MMC_SDHI_SYS_DMAC if (SUPERH || ARM)
	select MMC_SDHI_INTERNAL_DMAC if ARM64
	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
	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
	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 SDH_BFIN
	tristate "Blackfin Secure Digital Host support"
	depends on (BF54x && !BF544) || (BF51x && !BF512)
	help
	  If you say yes here you will get support for the Blackfin on-chip
	  Secure Digital Host interface.  This includes support for MMC and
	  SD cards.

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

	  If unsure, say N.

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

config MMC_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 GPIOLIB
	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 HAS_DMA
	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_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_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 HAS_DMA
	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 "JZ4740 SD/Multimedia Card Interface support"
	depends on MACH_JZ4740
	help
	  This selects support for the SD/MMC controller on Ingenic JZ4740
	  SoCs.
	  If you have a board based on such a SoC and with a SD/MMC slot,
	  say Y or M here.

config MMC_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 MFD_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 MFD_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
	help

config MMC_BCM2835
	tristate "Broadcom BCM2835 SDHOST MMC Controller support"
	depends on ARCH_BCM2835 || COMPILE_TEST
	depends on HAS_DMA
	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.
