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

DT_STM32_SDMMC_HAS_DMA := $(dt_nodelabel_has_prop,sdmmc,dmas)

config DISK_DRIVER_SDMMC
	bool "SDMMC card driver"
	default y if DT_HAS_ZEPHYR_SDMMC_DISK_ENABLED || \
			DT_HAS_ST_STM32_SDMMC_ENABLED
	help
	  SDMMC card driver.

if DISK_DRIVER_SDMMC

config SD_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_SUBSYS
	bool "SDMMC access via SD subsystem"
	select SDMMC_STACK
	default y
	depends on DT_HAS_ZEPHYR_SDMMC_DISK_ENABLED
	help
	  Enable SDMMC access via SD subsystem.

config SDMMC_STM32
	bool "STM32 SDMMC driver"
	default y
	depends on DT_HAS_ST_STM32_SDMMC_ENABLED
	select USE_STM32_HAL_SD if !SDMMC_STM32_EMMC
	select USE_STM32_HAL_SD_EX if !SDMMC_STM32_EMMC && SOC_SERIES_STM32L4X
	select USE_STM32_HAL_MMC if SDMMC_STM32_EMMC
	select USE_STM32_HAL_MMC_EX if SDMMC_STM32_EMMC && SOC_SERIES_STM32L4X
	select USE_STM32_LL_SDMMC
	select USE_STM32_HAL_DMA if (SOC_SERIES_STM32L4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F4X)
	select DMA if ($(DT_STM32_SDMMC_HAS_DMA) && SOC_SERIES_STM32F4X)
	select RESET
	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 || \
		   SOC_SERIES_STM32L5X
	help
	  Enable SDMMC Hardware Flow Control to avoid FIFO underrun (TX mode) and
	  overrun (RX mode) errors.

config SDMMC_STM32_EMMC
	bool "STM32 SDMMC eMMC mode"
	depends on SDMMC_STM32
	help
	  Use eMMC instead of SDIO (SD card) protocol. These are similar, but not entirely the same.

config SDMMC_STM32_CLOCK_CHECK
	bool "Runtime SDMMC 48MHz clock check"
	depends on SDMMC_STM32
	default y
	help
	  Enable SDMMC clock 48MHz configuration runtime check.
	  In specific cases, this check might provide wrong verdict and should
	  be disabled.

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

endif # DISK_DRIVER_SDMMC
