# Copyright (c) 2018 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

DT_COMPAT_ST_STM32_I2C_V1 := st,stm32-i2c-v1
DT_COMPAT_ST_STM32_I2C_V2 := st,stm32-i2c-v2

menuconfig I2C_STM32
	bool "STM32 I2C driver"
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_I2C_V1)) || $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_I2C_V2))
	depends on SOC_FAMILY_STM32
	help
	  Enable I2C support on the STM32 SoCs

if I2C_STM32

config I2C_STM32_V1
	bool
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_I2C_V1))
	select USE_STM32_LL_I2C
	select I2C_STM32_INTERRUPT if I2C_SLAVE
	help
	  Enable I2C support on the STM32 F1 and F4X family of processors. This
	  driver also supports the F2 and L1 series.

config I2C_STM32_V2
	bool
	default $(dt_compat_enabled,$(DT_COMPAT_ST_STM32_I2C_V2))
	select USE_STM32_LL_I2C
	select USE_STM32_LL_RCC if SOC_SERIES_STM32F0X || SOC_SERIES_STM32F3X
	select I2C_STM32_INTERRUPT if I2C_SLAVE
	help
	  Enable I2C support on the STM32 F0, F3, F7, L4, WBX, MP1, G0, G4, WL and
	  H7 family of processors.
	  This driver also supports the L0 series.
	  If I2C_SLAVE is enabled it selects I2C_STM32_INTERRUPT, since slave mode
	  is only supported by this driver with interrupts enabled.

config I2C_STM32_INTERRUPT
	bool "STM32 MCU I2C Interrupt Support"
	depends on I2C_STM32_V1 || I2C_STM32_V2
	default y
	help
	  Enable Interrupt support for the I2C Driver

config I2C_STM32_COMBINED_INTERRUPT
	bool
	depends on I2C_STM32_INTERRUPT
	default y if SOC_SERIES_STM32F0X || SOC_SERIES_STM32G0X || SOC_SERIES_STM32L0X

endif # I2C_STM32
