From f41195f922dd5e4a44e5913dae02282f30a7b127 Mon Sep 17 00:00:00 2001 From: TOKITA Hiroshi Date: Wed, 27 Nov 2024 07:45:35 +0900 Subject: [PATCH] drivers: sensor: lsm6dso: Fix issue lsm6dso32 cannot enabled The lsm6dso driver does not correctly reflect the status of the node in dt. So the driver didn't compile even if `st,lsm6dso32` node exists. I fixed it to correctly go through ithe compile. Signed-off-by: TOKITA Hiroshi --- drivers/sensor/st/lsm6dso/Kconfig | 8 +++--- drivers/sensor/st/lsm6dso/lsm6dso.c | 40 ++++++++++++++--------------- drivers/sensor/st/lsm6dso/lsm6dso.h | 16 +++++++----- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/drivers/sensor/st/lsm6dso/Kconfig b/drivers/sensor/st/lsm6dso/Kconfig index aa0f1890330..c0c1b7fd994 100644 --- a/drivers/sensor/st/lsm6dso/Kconfig +++ b/drivers/sensor/st/lsm6dso/Kconfig @@ -6,10 +6,12 @@ menuconfig LSM6DSO bool "LSM6DSO I2C/SPI accelerometer and gyroscope Chip" default y - depends on DT_HAS_ST_LSM6DSO_ENABLED + depends on DT_HAS_ST_LSM6DSO_ENABLED || DT_HAS_ST_LSM6DSO32_ENABLED depends on ZEPHYR_HAL_ST_MODULE - select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO),i2c) - select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO),spi) + select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO),i2c) || \ + $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO32),i2c) + select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO),spi) || \ + $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO32),spi) select HAS_STMEMSC select USE_STDC_LSM6DSO help diff --git a/drivers/sensor/st/lsm6dso/lsm6dso.c b/drivers/sensor/st/lsm6dso/lsm6dso.c index 07b9a69c55f..8d5902465f8 100644 --- a/drivers/sensor/st/lsm6dso/lsm6dso.c +++ b/drivers/sensor/st/lsm6dso/lsm6dso.c @@ -8,8 +8,6 @@ * https://www.st.com/resource/en/datasheet/lsm6dso.pdf */ -#define DT_DRV_COMPAT st_lsm6dso - #include #include #include @@ -867,21 +865,17 @@ static int lsm6dso_init(const struct device *dev) return 0; } -#if DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 0 -#warning "LSM6DSO driver enabled without any devices" -#endif - /* * Device creation macro, shared by LSM6DSO_DEFINE_SPI() and * LSM6DSO_DEFINE_I2C(). */ -#define LSM6DSO_DEVICE_INIT(inst) \ +#define LSM6DSO_DEVICE_INIT(inst, model) \ SENSOR_DEVICE_DT_INST_DEFINE(inst, \ lsm6dso_init, \ NULL, \ - &lsm6dso_data_##inst, \ - &lsm6dso_config_##inst, \ + &model##_data_##inst, \ + &model##_config_##inst, \ POST_KERNEL, \ CONFIG_SENSOR_INIT_PRIORITY, \ &lsm6dso_driver_api); @@ -917,9 +911,9 @@ static int lsm6dso_init(const struct device *dev) COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, irq_gpios), \ (LSM6DSO_CFG_IRQ(inst)), ()) -#define LSM6DSO_CONFIG_SPI(inst) \ +#define LSM6DSO_CONFIG_SPI(inst, model) \ { \ - STMEMSC_CTX_SPI(&lsm6dso_config_##inst.stmemsc_cfg), \ + STMEMSC_CTX_SPI(&model##_config_##inst.stmemsc_cfg), \ .stmemsc_cfg = { \ .spi = SPI_DT_SPEC_INST_GET(inst, \ LSM6DSO_SPI_OP, \ @@ -932,9 +926,9 @@ static int lsm6dso_init(const struct device *dev) * Instantiation macros used when a device is on an I2C bus. */ -#define LSM6DSO_CONFIG_I2C(inst) \ +#define LSM6DSO_CONFIG_I2C(inst, model) \ { \ - STMEMSC_CTX_I2C(&lsm6dso_config_##inst.stmemsc_cfg), \ + STMEMSC_CTX_I2C(&model##_config_##inst.stmemsc_cfg), \ .stmemsc_cfg = { \ .i2c = I2C_DT_SPEC_INST_GET(inst), \ }, \ @@ -946,12 +940,18 @@ static int lsm6dso_init(const struct device *dev) * bus-specific macro at preprocessor time. */ -#define LSM6DSO_DEFINE(inst) \ - static struct lsm6dso_data lsm6dso_data_##inst; \ - static const struct lsm6dso_config lsm6dso_config_##inst = \ +#define LSM6DSO_DEFINE(inst, model) \ + static struct lsm6dso_data model##_data_##inst; \ + static const struct lsm6dso_config model##_config_##inst = \ COND_CODE_1(DT_INST_ON_BUS(inst, spi), \ - (LSM6DSO_CONFIG_SPI(inst)), \ - (LSM6DSO_CONFIG_I2C(inst))); \ - LSM6DSO_DEVICE_INIT(inst) + (LSM6DSO_CONFIG_SPI(inst, model)), \ + (LSM6DSO_CONFIG_I2C(inst, model))); \ + LSM6DSO_DEVICE_INIT(inst, model) -DT_INST_FOREACH_STATUS_OKAY(LSM6DSO_DEFINE) +#define DT_DRV_COMPAT st_lsm6dso +DT_INST_FOREACH_STATUS_OKAY_VARGS(LSM6DSO_DEFINE, lsm6dso) +#undef DT_DRV_COMPAT + +#define DT_DRV_COMPAT st_lsm6dso32 +DT_INST_FOREACH_STATUS_OKAY_VARGS(LSM6DSO_DEFINE, lsm6dso32) +#undef DT_DRV_COMPAT diff --git a/drivers/sensor/st/lsm6dso/lsm6dso.h b/drivers/sensor/st/lsm6dso/lsm6dso.h index c7f7279d3ba..a721f0244c1 100644 --- a/drivers/sensor/st/lsm6dso/lsm6dso.h +++ b/drivers/sensor/st/lsm6dso/lsm6dso.h @@ -19,13 +19,15 @@ #include #include "lsm6dso_reg.h" -#if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) +#if DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso, spi) || \ + DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso32, spi) #include -#endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) */ +#endif -#if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) +#if DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso, i2c) || \ + DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso32, i2c) #include -#endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) */ +#endif #define LSM6DSO_EN_BIT 0x01 #define LSM6DSO_DIS_BIT 0x00 @@ -39,10 +41,12 @@ struct lsm6dso_config { stmdev_ctx_t ctx; union { -#if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) +#if DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso, i2c) || \ + DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso32, i2c) const struct i2c_dt_spec i2c; #endif -#if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) +#if DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso, spi) || \ + DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(st_lsm6dso32, spi) const struct spi_dt_spec spi; #endif } stmemsc_cfg;