# 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 != n || BT_MRVL_SDIO != n || LIBERTAS_SDIO != n || WILC1000_SDIO != n)
	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
	depends on RPMB || !RPMB
	imply IOSCHED_BFQ
	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.
