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

menuconfig I2C_STM32
	bool "STM32 I2C driver"
	default y
	depends on DT_HAS_ST_STM32_I2C_V1_ENABLED || DT_HAS_ST_STM32_I2C_V2_ENABLED
	help
	  Enable I2C support on the STM32 SoCs

if I2C_STM32

config I2C_STM32_V1
	bool
	default y
	depends on DT_HAS_ST_STM32_I2C_V1_ENABLED
	select USE_STM32_LL_I2C
	select I2C_STM32_INTERRUPT if I2C_TARGET
	help
	  Driver variant matching `st,stm32-i2c-v1` compatible.

config I2C_STM32_V2
	bool
	default y
	depends on DT_HAS_ST_STM32_I2C_V2_ENABLED
	select USE_STM32_LL_I2C
	select USE_STM32_LL_RCC if SOC_SERIES_STM32F0X || SOC_SERIES_STM32F3X
	select I2C_STM32_INTERRUPT if I2C_TARGET
	help
	  Driver variant matching `st,stm32-i2c-v2` compatible.
	  If I2C_TARGET is enabled it selects I2C_STM32_INTERRUPT, since target 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
