drivers/sensor: lsm6dso: Move odr/range Kconfig property into dts
Move odr and range properties for both accelerometer and gyro from Kconfigs to Device Tree. Fixes #41117 Signed-off-by: Armando Visconti <armando.visconti@st.com>
This commit is contained in:
parent
df4e87f973
commit
18e8cadaf9
4 changed files with 101 additions and 157 deletions
|
@ -85,72 +85,4 @@ config LSM6DSO_EXT_LPS22HB
|
|||
|
||||
endif # LSM6DSO_SENSORHUB
|
||||
|
||||
menu "Attributes"
|
||||
|
||||
config LSM6DSO_GYRO_FS
|
||||
int "Gyroscope full-scale range"
|
||||
default 0
|
||||
help
|
||||
Specify the default gyroscope full-scale range.
|
||||
An X value for the config represents a range of +/- X degree per
|
||||
second. Valid values are:
|
||||
0: Full Scale selected at runtime
|
||||
125: +/- 125dps
|
||||
250: +/- 250dps
|
||||
500: +/- 500dps
|
||||
1000: +/- 1000dps
|
||||
2000: +/- 2000dps
|
||||
|
||||
config LSM6DSO_GYRO_ODR
|
||||
int "Gyroscope Output data rate frequency"
|
||||
range 0 10
|
||||
default 0
|
||||
help
|
||||
Specify the default accelerometer output data rate expressed in
|
||||
samples per second (Hz).
|
||||
0: ODR selected at runtime
|
||||
1: 12.5Hz
|
||||
2: 26Hz
|
||||
3: 52Hz
|
||||
4: 104Hz
|
||||
5: 208Hz
|
||||
6: 416Hz
|
||||
7: 833Hz
|
||||
8: 1660Hz
|
||||
9: 3330Hz
|
||||
10: 6660Hz
|
||||
|
||||
config LSM6DSO_ACCEL_FS
|
||||
int "Accelerometer full-scale range"
|
||||
default 0
|
||||
help
|
||||
Specify the default accelerometer full-scale range.
|
||||
An X value for the config represents a range of +/- X G. Valid values
|
||||
are:
|
||||
0: Full Scale selected at runtime
|
||||
2: +/- 2g
|
||||
4: +/- 4g
|
||||
8: +/- 8g
|
||||
16: +/- 16g
|
||||
|
||||
config LSM6DSO_ACCEL_ODR
|
||||
int "Accelerometer Output data rate frequency"
|
||||
range 0 10
|
||||
default 0
|
||||
help
|
||||
Specify the default accelerometer output data rate expressed in
|
||||
samples per second (Hz).
|
||||
0: ODR selected at runtime
|
||||
1: 12.5Hz
|
||||
2: 26Hz
|
||||
3: 52Hz
|
||||
4: 104Hz
|
||||
5: 208Hz
|
||||
6: 416Hz
|
||||
7: 833Hz
|
||||
8: 1660Hz
|
||||
9: 3330Hz
|
||||
10: 6660Hz
|
||||
endmenu
|
||||
|
||||
endif # LSM6DSO
|
||||
|
|
|
@ -26,7 +26,6 @@ LOG_MODULE_REGISTER(LSM6DSO, CONFIG_SENSOR_LOG_LEVEL);
|
|||
static const uint16_t lsm6dso_odr_map[] = {0, 12, 26, 52, 104, 208, 416, 833,
|
||||
1660, 3330, 6660};
|
||||
|
||||
#if defined(LSM6DSO_ACCEL_ODR_RUNTIME) || defined(LSM6DSO_GYRO_ODR_RUNTIME)
|
||||
static int lsm6dso_freq_to_odr_val(uint16_t freq)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -39,7 +38,6 @@ static int lsm6dso_freq_to_odr_val(uint16_t freq)
|
|||
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lsm6dso_odr_to_freq_val(uint16_t odr)
|
||||
{
|
||||
|
@ -52,7 +50,6 @@ static int lsm6dso_odr_to_freq_val(uint16_t odr)
|
|||
return lsm6dso_odr_map[ARRAY_SIZE(lsm6dso_odr_map) - 1];
|
||||
}
|
||||
|
||||
#ifdef LSM6DSO_ACCEL_FS_RUNTIME
|
||||
static const uint16_t lsm6dso_accel_fs_map[] = {2, 16, 4, 8};
|
||||
static const uint16_t lsm6dso_accel_fs_sens[] = {1, 8, 2, 4};
|
||||
|
||||
|
@ -68,11 +65,9 @@ static int lsm6dso_accel_range_to_fs_val(int32_t range)
|
|||
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LSM6DSO_GYRO_FS_RUNTIME
|
||||
static const uint16_t lsm6dso_gyro_fs_map[] = {250, 500, 1000, 2000, 125};
|
||||
static const uint16_t lsm6dso_gyro_fs_sens[] = {2, 4, 8, 16, 1};
|
||||
static const uint16_t lsm6dso_gyro_fs_map[] = {250, 125, 500, 0, 1000, 0, 2000};
|
||||
static const uint16_t lsm6dso_gyro_fs_sens[] = {2, 1, 4, 0, 8, 0, 16};
|
||||
|
||||
static int lsm6dso_gyro_range_to_fs_val(int32_t range)
|
||||
{
|
||||
|
@ -86,7 +81,6 @@ static int lsm6dso_gyro_range_to_fs_val(int32_t range)
|
|||
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int lsm6dso_reboot(const struct device *dev)
|
||||
{
|
||||
|
@ -157,7 +151,6 @@ static int lsm6dso_gyro_set_odr_raw(const struct device *dev, uint8_t odr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef LSM6DSO_ACCEL_ODR_RUNTIME
|
||||
static int lsm6dso_accel_odr_set(const struct device *dev, uint16_t freq)
|
||||
{
|
||||
int odr;
|
||||
|
@ -174,9 +167,7 @@ static int lsm6dso_accel_odr_set(const struct device *dev, uint16_t freq)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LSM6DSO_ACCEL_FS_RUNTIME
|
||||
static int lsm6dso_accel_range_set(const struct device *dev, int32_t range)
|
||||
{
|
||||
int fs;
|
||||
|
@ -195,7 +186,6 @@ static int lsm6dso_accel_range_set(const struct device *dev, int32_t range)
|
|||
data->acc_gain = (lsm6dso_accel_fs_sens[fs] * GAIN_UNIT_XL);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lsm6dso_accel_config(const struct device *dev,
|
||||
enum sensor_channel chan,
|
||||
|
@ -203,14 +193,10 @@ static int lsm6dso_accel_config(const struct device *dev,
|
|||
const struct sensor_value *val)
|
||||
{
|
||||
switch (attr) {
|
||||
#ifdef LSM6DSO_ACCEL_FS_RUNTIME
|
||||
case SENSOR_ATTR_FULL_SCALE:
|
||||
return lsm6dso_accel_range_set(dev, sensor_ms2_to_g(val));
|
||||
#endif
|
||||
#ifdef LSM6DSO_ACCEL_ODR_RUNTIME
|
||||
case SENSOR_ATTR_SAMPLING_FREQUENCY:
|
||||
return lsm6dso_accel_odr_set(dev, val->val1);
|
||||
#endif
|
||||
default:
|
||||
LOG_DBG("Accel attribute not supported.");
|
||||
return -ENOTSUP;
|
||||
|
@ -219,7 +205,6 @@ static int lsm6dso_accel_config(const struct device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef LSM6DSO_GYRO_ODR_RUNTIME
|
||||
static int lsm6dso_gyro_odr_set(const struct device *dev, uint16_t freq)
|
||||
{
|
||||
int odr;
|
||||
|
@ -236,9 +221,7 @@ static int lsm6dso_gyro_odr_set(const struct device *dev, uint16_t freq)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef LSM6DSO_GYRO_FS_RUNTIME
|
||||
static int lsm6dso_gyro_range_set(const struct device *dev, int32_t range)
|
||||
{
|
||||
int fs;
|
||||
|
@ -257,7 +240,6 @@ static int lsm6dso_gyro_range_set(const struct device *dev, int32_t range)
|
|||
data->gyro_gain = (lsm6dso_gyro_fs_sens[fs] * GAIN_UNIT_G);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lsm6dso_gyro_config(const struct device *dev,
|
||||
enum sensor_channel chan,
|
||||
|
@ -265,14 +247,10 @@ static int lsm6dso_gyro_config(const struct device *dev,
|
|||
const struct sensor_value *val)
|
||||
{
|
||||
switch (attr) {
|
||||
#ifdef LSM6DSO_GYRO_FS_RUNTIME
|
||||
case SENSOR_ATTR_FULL_SCALE:
|
||||
return lsm6dso_gyro_range_set(dev, sensor_rad_to_degrees(val));
|
||||
#endif
|
||||
#ifdef LSM6DSO_GYRO_ODR_RUNTIME
|
||||
case SENSOR_ATTR_SAMPLING_FREQUENCY:
|
||||
return lsm6dso_gyro_odr_set(dev, val->val1);
|
||||
#endif
|
||||
default:
|
||||
LOG_DBG("Gyro attribute not supported.");
|
||||
return -ENOTSUP;
|
||||
|
@ -515,8 +493,7 @@ static int lsm6dso_gyro_channel_get(enum sensor_channel chan,
|
|||
struct sensor_value *val,
|
||||
struct lsm6dso_data *data)
|
||||
{
|
||||
return lsm6dso_gyro_get_channel(chan, val, data,
|
||||
LSM6DSO_DEFAULT_GYRO_SENSITIVITY);
|
||||
return lsm6dso_gyro_get_channel(chan, val, data, data->gyro_gain);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_LSM6DSO_ENABLE_TEMP)
|
||||
|
@ -740,6 +717,7 @@ static int lsm6dso_init_chip(const struct device *dev)
|
|||
stmdev_ctx_t *ctx = (stmdev_ctx_t *)&cfg->ctx;
|
||||
struct lsm6dso_data *lsm6dso = dev->data;
|
||||
uint8_t chip_id;
|
||||
uint8_t odr, fs;
|
||||
|
||||
if (lsm6dso_device_id_get(ctx, &chip_id) < 0) {
|
||||
LOG_DBG("Failed reading chip id");
|
||||
|
@ -766,28 +744,35 @@ static int lsm6dso_init_chip(const struct device *dev)
|
|||
|
||||
k_busy_wait(100);
|
||||
|
||||
if (lsm6dso_accel_set_fs_raw(dev,
|
||||
LSM6DSO_DEFAULT_ACCEL_FULLSCALE) < 0) {
|
||||
LOG_DBG("failed to set accelerometer full-scale");
|
||||
fs = cfg->accel_range;
|
||||
LOG_DBG("accel range is %d", fs);
|
||||
if (lsm6dso_accel_set_fs_raw(dev, fs) < 0) {
|
||||
LOG_ERR("failed to set accelerometer range %d", fs);
|
||||
return -EIO;
|
||||
}
|
||||
lsm6dso->acc_gain = LSM6DSO_DEFAULT_ACCEL_SENSITIVITY;
|
||||
lsm6dso->acc_gain = lsm6dso_accel_fs_sens[fs] * GAIN_UNIT_XL;
|
||||
|
||||
lsm6dso->accel_freq = lsm6dso_odr_to_freq_val(CONFIG_LSM6DSO_ACCEL_ODR);
|
||||
if (lsm6dso_accel_set_odr_raw(dev, CONFIG_LSM6DSO_ACCEL_ODR) < 0) {
|
||||
LOG_DBG("failed to set accelerometer sampling rate");
|
||||
odr = cfg->accel_odr;
|
||||
LOG_DBG("accel odr is %d", odr);
|
||||
lsm6dso->accel_freq = lsm6dso_odr_to_freq_val(odr);
|
||||
if (lsm6dso_accel_set_odr_raw(dev, odr) < 0) {
|
||||
LOG_ERR("failed to set accelerometer odr %d", odr);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (lsm6dso_gyro_set_fs_raw(dev, LSM6DSO_DEFAULT_GYRO_FULLSCALE) < 0) {
|
||||
LOG_DBG("failed to set gyroscope full-scale");
|
||||
fs = cfg->gyro_range;
|
||||
LOG_DBG("gyro range is %d", fs);
|
||||
if (lsm6dso_gyro_set_fs_raw(dev, fs) < 0) {
|
||||
LOG_ERR("failed to set gyroscope range %d", fs);
|
||||
return -EIO;
|
||||
}
|
||||
lsm6dso->gyro_gain = LSM6DSO_DEFAULT_GYRO_SENSITIVITY;
|
||||
lsm6dso->gyro_gain = (lsm6dso_gyro_fs_sens[fs] * GAIN_UNIT_G);
|
||||
|
||||
lsm6dso->gyro_freq = lsm6dso_odr_to_freq_val(CONFIG_LSM6DSO_GYRO_ODR);
|
||||
if (lsm6dso_gyro_set_odr_raw(dev, CONFIG_LSM6DSO_GYRO_ODR) < 0) {
|
||||
LOG_DBG("failed to set gyroscope sampling rate");
|
||||
odr = cfg->gyro_odr;
|
||||
LOG_DBG("gyro odr is %d", odr);
|
||||
lsm6dso->gyro_freq = lsm6dso_odr_to_freq_val(odr);
|
||||
if (lsm6dso_gyro_set_odr_raw(dev, odr) < 0) {
|
||||
LOG_ERR("failed to set gyroscope odr %d", odr);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
@ -892,6 +877,10 @@ static int lsm6dso_init(const struct device *dev)
|
|||
LSM6DSO_SPI_OP, \
|
||||
0), \
|
||||
}, \
|
||||
.accel_odr = DT_INST_PROP(inst, accel_odr), \
|
||||
.accel_range = DT_INST_PROP(inst, accel_range), \
|
||||
.gyro_odr = DT_INST_PROP(inst, gyro_odr), \
|
||||
.gyro_range = DT_INST_PROP(inst, gyro_range), \
|
||||
COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, irq_gpios), \
|
||||
(LSM6DSO_CFG_IRQ(inst)), ()) \
|
||||
}
|
||||
|
@ -913,6 +902,10 @@ static int lsm6dso_init(const struct device *dev)
|
|||
.stmemsc_cfg = { \
|
||||
.i2c = I2C_DT_SPEC_INST_GET(inst), \
|
||||
}, \
|
||||
.accel_odr = DT_INST_PROP(inst, accel_odr), \
|
||||
.accel_range = DT_INST_PROP(inst, accel_range), \
|
||||
.gyro_odr = DT_INST_PROP(inst, gyro_odr), \
|
||||
.gyro_range = DT_INST_PROP(inst, gyro_range), \
|
||||
COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, irq_gpios), \
|
||||
(LSM6DSO_CFG_IRQ(inst)), ()) \
|
||||
}
|
||||
|
|
|
@ -40,56 +40,6 @@
|
|||
#define SENSOR_DEG2RAD_DOUBLE (SENSOR_PI_DOUBLE / 180)
|
||||
#define SENSOR_G_DOUBLE (SENSOR_G / 1000000.0)
|
||||
|
||||
#if CONFIG_LSM6DSO_ACCEL_FS == 0
|
||||
#define LSM6DSO_ACCEL_FS_RUNTIME 1
|
||||
#define LSM6DSO_DEFAULT_ACCEL_FULLSCALE 0
|
||||
#define LSM6DSO_DEFAULT_ACCEL_SENSITIVITY GAIN_UNIT_XL
|
||||
#elif CONFIG_LSM6DSO_ACCEL_FS == 2
|
||||
#define LSM6DSO_DEFAULT_ACCEL_FULLSCALE 0
|
||||
#define LSM6DSO_DEFAULT_ACCEL_SENSITIVITY GAIN_UNIT_XL
|
||||
#elif CONFIG_LSM6DSO_ACCEL_FS == 4
|
||||
#define LSM6DSO_DEFAULT_ACCEL_FULLSCALE 2
|
||||
#define LSM6DSO_DEFAULT_ACCEL_SENSITIVITY (2.0 * GAIN_UNIT_XL)
|
||||
#elif CONFIG_LSM6DSO_ACCEL_FS == 8
|
||||
#define LSM6DSO_DEFAULT_ACCEL_FULLSCALE 3
|
||||
#define LSM6DSO_DEFAULT_ACCEL_SENSITIVITY (4.0 * GAIN_UNIT_XL)
|
||||
#elif CONFIG_LSM6DSO_ACCEL_FS == 16
|
||||
#define LSM6DSO_DEFAULT_ACCEL_FULLSCALE 1
|
||||
#define LSM6DSO_DEFAULT_ACCEL_SENSITIVITY (8.0 * GAIN_UNIT_XL)
|
||||
#endif
|
||||
|
||||
#if (CONFIG_LSM6DSO_ACCEL_ODR == 0)
|
||||
#define LSM6DSO_ACCEL_ODR_RUNTIME 1
|
||||
#endif
|
||||
|
||||
#define GYRO_FULLSCALE_125 4
|
||||
|
||||
#if CONFIG_LSM6DSO_GYRO_FS == 0
|
||||
#define LSM6DSO_GYRO_FS_RUNTIME 1
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 4
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY GAIN_UNIT_G
|
||||
#elif CONFIG_LSM6DSO_GYRO_FS == 125
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 4
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY GAIN_UNIT_G
|
||||
#elif CONFIG_LSM6DSO_GYRO_FS == 250
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 0
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY (2.0 * GAIN_UNIT_G)
|
||||
#elif CONFIG_LSM6DSO_GYRO_FS == 500
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 1
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY (4.0 * GAIN_UNIT_G)
|
||||
#elif CONFIG_LSM6DSO_GYRO_FS == 1000
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 2
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY (8.0 * GAIN_UNIT_G)
|
||||
#elif CONFIG_LSM6DSO_GYRO_FS == 2000
|
||||
#define LSM6DSO_DEFAULT_GYRO_FULLSCALE 3
|
||||
#define LSM6DSO_DEFAULT_GYRO_SENSITIVITY (16.0 * GAIN_UNIT_G)
|
||||
#endif
|
||||
|
||||
|
||||
#if (CONFIG_LSM6DSO_GYRO_ODR == 0)
|
||||
#define LSM6DSO_GYRO_ODR_RUNTIME 1
|
||||
#endif
|
||||
|
||||
struct lsm6dso_config {
|
||||
stmdev_ctx_t ctx;
|
||||
union {
|
||||
|
@ -100,6 +50,10 @@ struct lsm6dso_config {
|
|||
const struct spi_dt_spec spi;
|
||||
#endif
|
||||
} stmemsc_cfg;
|
||||
uint8_t accel_odr;
|
||||
uint8_t accel_range;
|
||||
uint8_t gyro_odr;
|
||||
uint8_t gyro_range;
|
||||
#ifdef CONFIG_LSM6DSO_TRIGGER
|
||||
const struct gpio_dt_spec gpio_drdy;
|
||||
uint8_t int_pin;
|
||||
|
|
|
@ -26,3 +26,68 @@ properties:
|
|||
(INT1 or INT2) the drdy line is attached to. This property is not
|
||||
mandatory and if not present it defaults to 1 which is the
|
||||
configuration at power-up.
|
||||
|
||||
accel-range:
|
||||
type: int
|
||||
required: false
|
||||
default: 0
|
||||
description: |
|
||||
Range in g. Default is power-up configuration.
|
||||
enum:
|
||||
- 0 # 2g (0.061 mg/LSB)
|
||||
- 1 # 16g (0.488 mg/LSB)
|
||||
- 2 # 4g (0.122 mg/LSB)
|
||||
- 3 # 8g (0.244 mg/LSB)
|
||||
|
||||
accel-odr:
|
||||
type: int
|
||||
required: false
|
||||
default: 0
|
||||
description: |
|
||||
Specify the default accelerometer output data rate expressed in samples per second (Hz).
|
||||
Default is power-up configuration.
|
||||
enum:
|
||||
- 0 # Power-Down
|
||||
- 1 # 12.5Hz
|
||||
- 2 # 26Hz
|
||||
- 3 # 52Hz
|
||||
- 4 # 104Hz
|
||||
- 5 # 208Hz
|
||||
- 6 # 417Hz
|
||||
- 7 # 833Hz
|
||||
- 8 # 1667Hz
|
||||
- 9 # 3333Hz
|
||||
- 10 # 6667Hz
|
||||
|
||||
gyro-range:
|
||||
type: int
|
||||
required: false
|
||||
default: 0
|
||||
description: |
|
||||
Range in dps. Default is power-up configuration.
|
||||
enum:
|
||||
- 0 # 250 dps (8.75 mdps/LSB)
|
||||
- 1 # 125 dps (4.375 mdps/LSB)
|
||||
- 2 # 500 dps (17.50 mdps/LSB)
|
||||
- 4 # 1000 dps (35 mdps/LSB)
|
||||
- 6 # 2000 dps (70 mdps/LSB)
|
||||
|
||||
gyro-odr:
|
||||
type: int
|
||||
required: false
|
||||
default: 0
|
||||
description: |
|
||||
Specify the default gyro output data rate expressed in samples per second (Hz).
|
||||
Default is power-up configuration.
|
||||
enum:
|
||||
- 0 # Power-Down
|
||||
- 1 # 12.5Hz
|
||||
- 2 # 26Hz
|
||||
- 3 # 52Hz
|
||||
- 4 # 104Hz
|
||||
- 5 # 208Hz
|
||||
- 6 # 417Hz
|
||||
- 7 # 833Hz
|
||||
- 8 # 1667Hz
|
||||
- 9 # 3333Hz
|
||||
- 10 # 6667Hz
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue