# SPDX-License-Identifier: GPL-2.0-only
#
# MMC core configuration
#
config PWRSEQ_EMMC
	tristate "HW reset support for eMMC"
	default y
	depends on OF
	help
	  This selects Hardware reset support aka pwrseq-emmc for eMMC
	  devices. By default this option is set to y.

	  This driver can also be built as a module. If so, the module
	  will be called pwrseq_emmc.

config PWRSEQ_SD8787
	tristate "HW reset support for SD8787 BT + Wifi module"
	depends on OF && (MWIFIEX || BT_MRVL_SDIO || LIBERTAS_SDIO || WILC1000_SDIO)
	help
	  This selects hardware reset support for the SD8787 BT + Wifi
	  module. By default this option is set to n.

	  This driver can also be built as a module. If so, the module
	  will be called pwrseq_sd8787.

config PWRSEQ_SIMPLE
	tristate "Simple HW reset support for MMC"
	default y
	depends on OF
	help
	  This selects simple hardware reset support aka pwrseq-simple for MMC
	  devices. By default this option is set to y.

	  This driver can also be built as a module. If so, the module
	  will be called pwrseq_simple.

config MMC_BLOCK
	tristate "MMC block device driver"
	depends on BLOCK
	default y
	help
	  Say Y here to enable the MMC block device driver support.
	  This provides a block device driver, which you can use to
	  mount the filesystem. Almost everyone wishing MMC support
	  should say Y or M here.

config MMC_BLOCK_MINORS
	int "Number of minors per block device"
	depends on MMC_BLOCK
	range 4 256
	default 8
	help
	  Number of minors per block device. One is needed for every
	  partition on the disk (plus one for the whole disk).

	  Number of total MMC minors available is 256, so your number
	  of supported block devices will be limited to 256 divided
	  by this number.

	  Default is 8 to be backwards compatible with previous
	  hardwired device numbering.

	  If unsure, say 8 here.

config SDIO_UART
	tristate "SDIO UART/GPS class support"
	depends on TTY
	help
	  SDIO function driver for SDIO cards that implements the UART
	  class, as well as the GPS class which appears like a UART.

config MMC_TEST
	tristate "MMC host test driver"
	help
	  Development driver that performs a series of reads and writes
	  to a memory card in order to expose certain well known bugs
	  in host controllers. The tests are executed by writing to the
	  "test" file in debugfs under each card. Note that whatever is
	  on your card will be overwritten by these tests.

	  This driver is only of interest to those developing or
	  testing a host driver. Most people should say N here.

config MMC_CRYPTO
	bool "MMC Crypto Engine Support"
	depends on BLK_INLINE_ENCRYPTION
	help
	  Enable Crypto Engine Support in MMC.
	  Enabling this makes it possible for the kernel to use the crypto
	  capabilities of the MMC device (if present) to perform crypto
	  operations on data being transferred to/from the device.
