From c77d5b8c3b926b02d72d48027bfdc5c970bd16c9 Mon Sep 17 00:00:00 2001 From: Mathieu Choplain Date: Mon, 22 Jul 2024 17:09:25 +0200 Subject: [PATCH] drivers: sensor: stm32_vbat: handle disabled ADCs more gracefully This commit modifies the STM32 battery voltage sensor driver to handle erroneous usage more gracefully. More precisely, it now fails builds with an explicit error message when the sensor is enabled but the corresponding ADC is not. This can only happen on STM32 series with more than one ADC (e.g., H7). Signed-off-by: Mathieu Choplain --- drivers/sensor/st/stm32_vbat/stm32_vbat.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/sensor/st/stm32_vbat/stm32_vbat.c b/drivers/sensor/st/stm32_vbat/stm32_vbat.c index 87942f4bfd2..b74e0cf8b7f 100644 --- a/drivers/sensor/st/stm32_vbat/stm32_vbat.c +++ b/drivers/sensor/st/stm32_vbat/stm32_vbat.c @@ -124,14 +124,17 @@ static int stm32_vbat_init(const struct device *dev) return 0; } -#define STM32_VBAT_GET_ADC_OR_NULL(inst) \ - COND_CODE_1(DT_NODE_HAS_STATUS(DT_INST_IO_CHANNELS_CTLR(inst), okay), \ - (DEVICE_DT_GET(DT_INST_IO_CHANNELS_CTLR(inst))), (NULL)) +#define ASSERT_VBAT_ADC_ENABLED(inst) \ + BUILD_ASSERT(DT_NODE_HAS_STATUS(DT_INST_IO_CHANNELS_CTLR(inst), okay), \ + "ADC instance '" DT_NODE_FULL_NAME(DT_INST_IO_CHANNELS_CTLR(inst)) "' needed " \ + "by Vbat sensor '" DT_NODE_FULL_NAME(DT_DRV_INST(inst)) "' is not enabled") #define STM32_VBAT_DEFINE(inst) \ + ASSERT_VBAT_ADC_ENABLED(inst); \ + \ static struct stm32_vbat_data stm32_vbat_dev_data_##inst = { \ - .adc = STM32_VBAT_GET_ADC_OR_NULL(inst), \ - .adc_base = (ADC_TypeDef *)DT_REG_ADDR(DT_INST_IO_CHANNELS_CTLR(0)), \ + .adc = DEVICE_DT_GET(DT_INST_IO_CHANNELS_CTLR(inst)), \ + .adc_base = (ADC_TypeDef *)DT_REG_ADDR(DT_INST_IO_CHANNELS_CTLR(inst)), \ .adc_cfg = { \ .gain = ADC_GAIN_1, \ .reference = ADC_REF_INTERNAL, \