# DMA configuration options

# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2019 Song Qiang <songqiang1304521@gmail.com>
# SPDX-License-Identifier: Apache-2.0

DT_COMPAT_ST_STM32_DMA_V1 := st,stm32-dma-v1
DT_COMPAT_ST_STM32_DMA_V2 := st,stm32-dma-v2
DT_COMPAT_ST_STM32_DMA_V2BIS := st,stm32-dma-v2bis
DT_COMPAT_ST_STM32_DMAMUX := st,stm32-dmamux

config DMA_STM32
	bool "STM32 DMA driver"
	select USE_STM32_LL_DMA
	depends on SOC_FAMILY_STM32
	help
	  DMA driver for STM32 series SoCs.

if DMA_STM32

config DMA_STM32_V1
	bool
	default y if $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_DMA_V1))
	help
	  Enable DMA V1 support.

config DMA_STM32_V2
	bool
	default y if $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_DMA_V2)) \
			|| $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_DMA_V2BIS))
	help
	  Enable DMA V2 or DMA V2bis support. With the versions V2 of DMA, the
	  peripheral request must be specified in the dma slot of the dma cell
	  With the versions V2 bis of DMA, the peripheral request (slot) is not
	  a parameter of the dma-cell.

config DMAMUX_STM32
	bool
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_DMAMUX))
	help
	  Enable DMAMUX support.

config DMA_STM32_SHARED_IRQS
	bool
	default y
	depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32G0X || SOC_SERIES_STM32L0X
	help
	  Enable shared IRQ support on devices where channels share 1 IRQ.

endif # DMA_STM32
