From 344e06025dc7c5b123d020782aaac6eba929cccb Mon Sep 17 00:00:00 2001 From: Armando Visconti Date: Mon, 31 May 2021 17:14:23 +0200 Subject: [PATCH] drivers/sensor: lis2dw12: Move range Kconfig property into dts Converts lis2dw12 range options (2g, 4g, 8g, 16g) from Kconfigs to Device Tree. Signed-off-by: Armando Visconti --- drivers/sensor/lis2dw12/Kconfig | 20 -------------------- drivers/sensor/lis2dw12/lis2dw12.c | 19 ++++++++----------- drivers/sensor/lis2dw12/lis2dw12.h | 12 +----------- dts/bindings/sensor/st,lis2dw12-common.yaml | 18 ++++++++++++++++++ 4 files changed, 27 insertions(+), 42 deletions(-) diff --git a/drivers/sensor/lis2dw12/Kconfig b/drivers/sensor/lis2dw12/Kconfig index 6db6c8bcabd..bc2275a4854 100644 --- a/drivers/sensor/lis2dw12/Kconfig +++ b/drivers/sensor/lis2dw12/Kconfig @@ -59,26 +59,6 @@ config LIS2DW12_TAP endif # LIS2DW12_TRIGGER -choice - prompt "Accelerometer Full-scale range setting" - default LIS2DW12_ACCEL_RANGE_RUNTIME - -config LIS2DW12_ACCEL_RANGE_RUNTIME - bool "Set at runtime (Default 2G)" - -config LIS2DW12_ACCEL_RANGE_2G - bool "2G" - -config LIS2DW12_ACCEL_RANGE_4G - bool "4G" - -config LIS2DW12_ACCEL_RANGE_8G - bool "8G" - -config LIS2DW12_ACCEL_RANGE_16G - bool "16G" -endchoice - choice prompt "Accelerometer sampling frequency (ODR)" default LIS2DW12_ODR_RUNTIME diff --git a/drivers/sensor/lis2dw12/lis2dw12.c b/drivers/sensor/lis2dw12/lis2dw12.c index f2868659360..076de7f93db 100644 --- a/drivers/sensor/lis2dw12/lis2dw12.c +++ b/drivers/sensor/lis2dw12/lis2dw12.c @@ -31,13 +31,12 @@ LOG_MODULE_REGISTER(LIS2DW12, CONFIG_SENSOR_LOG_LEVEL); * @dev: Pointer to instance of struct device (I2C or SPI) * @range: Full scale range (2, 4, 8 and 16 G) */ -static int lis2dw12_set_range(const struct device *dev, uint16_t range) +static int lis2dw12_set_range(const struct device *dev, uint8_t fs) { int err; struct lis2dw12_data *lis2dw12 = dev->data; const struct lis2dw12_device_config *cfg = dev->config; uint8_t shift_gain = 0U; - uint8_t fs = LIS2DW12_FS_TO_REG(range); err = lis2dw12_full_scale_set(lis2dw12->ctx, fs); @@ -48,8 +47,7 @@ static int lis2dw12_set_range(const struct device *dev, uint16_t range) if (!err) { /* save internally gain for optimization */ lis2dw12->gain = - LIS2DW12_FS_TO_GAIN(LIS2DW12_FS_TO_REG(range), - shift_gain); + LIS2DW12_FS_TO_GAIN(fs, shift_gain); } return err; @@ -146,7 +144,8 @@ static int lis2dw12_config(const struct device *dev, enum sensor_channel chan, { switch (attr) { case SENSOR_ATTR_FULL_SCALE: - return lis2dw12_set_range(dev, sensor_ms2_to_g(val)); + return lis2dw12_set_range(dev, + LIS2DW12_FS_TO_REG(sensor_ms2_to_g(val))); case SENSOR_ATTR_SAMPLING_FREQUENCY: return lis2dw12_set_odr(dev, val->val1); default: @@ -298,15 +297,12 @@ static int lis2dw12_init(const struct device *dev) return -EIO; } - if (lis2dw12_full_scale_set(lis2dw12->ctx, LIS2DW12_ACC_FS) < 0) { + LOG_DBG("range is %d", cfg->range); + if (lis2dw12_set_range(dev, LIS2DW12_FS_TO_REG(cfg->range)) < 0) { + LOG_ERR("range init error %d", cfg->range); return -EIO; } - lis2dw12->gain = - LIS2DW12_FS_TO_GAIN(LIS2DW12_ACC_FS, - cfg->pm == LIS2DW12_CONT_LOW_PWR_12bit ? - LIS2DW12_SHFT_GAIN_NOLP1 : 0); - #ifdef CONFIG_LIS2DW12_TRIGGER if (lis2dw12_init_interrupt(dev) < 0) { LOG_ERR("Failed to initialize interrupts"); @@ -320,6 +316,7 @@ static int lis2dw12_init(const struct device *dev) const struct lis2dw12_device_config lis2dw12_cfg = { .bus_name = DT_INST_BUS_LABEL(0), .pm = DT_INST_PROP(0, power_mode), + .range = DT_INST_PROP(0, range), #ifdef CONFIG_LIS2DW12_TRIGGER .gpio_int = GPIO_DT_SPEC_INST_GET_OR(0, irq_gpios, {0}), .int_pin = DT_INST_PROP(0, int_pin), diff --git a/drivers/sensor/lis2dw12/lis2dw12.h b/drivers/sensor/lis2dw12/lis2dw12.h index b90ad498ff9..7bad286cb89 100644 --- a/drivers/sensor/lis2dw12/lis2dw12.h +++ b/drivers/sensor/lis2dw12/lis2dw12.h @@ -47,17 +47,6 @@ /* FS reg value from Full Scale */ #define LIS2DW12_FS_TO_REG(_fs) (30 - __builtin_clz(_fs)) -#if defined(CONFIG_LIS2DW12_ACCEL_RANGE_RUNTIME) || \ - defined(CONFIG_LIS2DW12_ACCEL_RANGE_2G) - #define LIS2DW12_ACC_FS LIS2DW12_2g -#elif defined(CONFIG_LIS2DW12_ACCEL_RANGE_4G) - #define LIS2DW12_ACC_FS LIS2DW12_4g -#elif defined(CONFIG_LIS2DW12_ACCEL_RANGE_8G) - #define LIS2DW12_ACC_FS LIS2DW12_8g -#elif defined(CONFIG_LIS2DW12_ACCEL_RANGE_16G) - #define LIS2DW12_ACC_FS LIS2DW12_16g -#endif - /* Acc Gain value in ug/LSB in High Perf mode */ #define LIS2DW12_FS_2G_GAIN 244 #define LIS2DW12_FS_4G_GAIN 488 @@ -82,6 +71,7 @@ struct lis2dw12_device_config { const char *bus_name; lis2dw12_mode_t pm; + uint8_t range; #ifdef CONFIG_LIS2DW12_TRIGGER struct gpio_dt_spec gpio_int; uint8_t int_pin; diff --git a/dts/bindings/sensor/st,lis2dw12-common.yaml b/dts/bindings/sensor/st,lis2dw12-common.yaml index 90a00a102bf..930a1a5212a 100644 --- a/dts/bindings/sensor/st,lis2dw12-common.yaml +++ b/dts/bindings/sensor/st,lis2dw12-common.yaml @@ -30,6 +30,24 @@ properties: mandatory and if not present it defaults to 1 which is the configuration at power-up. + range: + type: int + required: false + default: 2 + description: | + Range in g. Default is power-up configuration. + + 16 # 16g (1.952 mg/LSB) + 8 # 8g (0.976 mg/LSB) + 4 # 4g (0.488 mg/LSB) + 2 # 2g (0.244 mg/LSB) + + enum: + - 16 + - 8 + - 4 + - 2 + power-mode: type: int required: false