# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

DT_COMPAT_ZEPHYR_MMC_SPI_SLOT := zephyr,mmc-spi-slot
DT_COMPAT_NXP_USDHC := nxp,imx-usdhc
DT_COMPAT_ST_STM32_SDMMC := st,stm32-sdmmc

config DISK_DRIVER_SDMMC
	bool "SDMMC card driver"
	help
	  SDMMC card driver.

if DISK_DRIVER_SDMMC

config SDMMC_INIT_PRIORITY
	int "Init priority"
	default 90
	help
	  SDMMC controller driver initialization priority.

config SDMMC_VOLUME_NAME
	string "SDMMC Disk mount point or drive name"
	default "SD" if FAT_FILESYSTEM_ELM
	default "SDMMC"
	help
	  Disk name as per file system naming guidelines.

config SDMMC_OVER_SPI
	bool "SDHC access over SPI"
	select SPI
	default $(dt_compat_enabled,$(DT_COMPAT_ZEPHYR_MMC_SPI_SLOT))
	help
	  File system on a SDHC card accessed over SPI.

config SDMMC_USDHC
	bool "NXP i.MXRT USDHC driver"
	depends on (HAS_MCUX_USDHC1 || HAS_MCUX_USDHC2)
	default $(dt_compat_enabled,$(DT_COMPAT_NXP_USDHC))
	help
	  File system on a SDHC card accessed over
	  NXP USDHC.

if SDMMC_USDHC
source "drivers/disk/Kconfig.usdhc"
endif

config SDMMC_STM32
	bool "STM32 SDMMC driver"
	depends on HAS_STM32CUBE
	select USE_STM32_HAL_SD
	select USE_STM32_HAL_SD_EX if SOC_SERIES_STM32L4X
	select USE_STM32_LL_SDMMC
	select USE_STM32_HAL_DMA if (SOC_SERIES_STM32L4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F4X)
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_SDMMC))
	help
	  File system on sdmmc accessed through stm32 sdmmc.

config SDMMC_STM32_HWFC
	bool "STM32 SDMMC Hardware Flow control"
	depends on SDMMC_STM32
	depends on SOC_SERIES_STM32H7X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32L4X
	help
	  Enable SDMMC Hardware Flow Control to avoid FIFO underrun (TX mode) and
	  overrun (RX mode) errors.

module = SDMMC
module-str = sdmmc
source "subsys/logging/Kconfig.template.log_config"

endif # DISK_DRIVER_SDMMC
