Skip to content

Commit c34e2e2

Browse files
Francesco Lavrajic23
authored andcommitted
iio: imu: st_lsm6dsx: fix iio_chan_spec for sensors without event detection
The st_lsm6dsx_acc_channels array of struct iio_chan_spec has a non-NULL event_spec field, indicating support for IIO events. However, event detection is not supported for all sensors, and if userspace tries to configure accelerometer wakeup events on a sensor device that does not support them (e.g. LSM6DS0), st_lsm6dsx_write_event() dereferences a NULL pointer when trying to write to the wakeup register. Define an additional struct iio_chan_spec array whose members have a NULL event_spec field, and use this array instead of st_lsm6dsx_acc_channels for sensors without event detection capability. Fixes: b5969ab ("iio: imu: st_lsm6dsx: add motion events") Signed-off-by: Francesco Lavra <flavra@baylibre.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Acked-by: Lorenzo Bianconi <lorenzo@kernel.org> Cc: stable@vger.kernel.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent da934ef commit c34e2e2

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ static const struct iio_chan_spec st_lsm6dsx_acc_channels[] = {
101101
IIO_CHAN_SOFT_TIMESTAMP(3),
102102
};
103103

104+
static const struct iio_chan_spec st_lsm6ds0_acc_channels[] = {
105+
ST_LSM6DSX_CHANNEL(IIO_ACCEL, 0x28, IIO_MOD_X, 0),
106+
ST_LSM6DSX_CHANNEL(IIO_ACCEL, 0x2a, IIO_MOD_Y, 1),
107+
ST_LSM6DSX_CHANNEL(IIO_ACCEL, 0x2c, IIO_MOD_Z, 2),
108+
IIO_CHAN_SOFT_TIMESTAMP(3),
109+
};
110+
104111
static const struct iio_chan_spec st_lsm6dsx_gyro_channels[] = {
105112
ST_LSM6DSX_CHANNEL(IIO_ANGL_VEL, 0x22, IIO_MOD_X, 0),
106113
ST_LSM6DSX_CHANNEL(IIO_ANGL_VEL, 0x24, IIO_MOD_Y, 1),
@@ -142,8 +149,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
142149
},
143150
.channels = {
144151
[ST_LSM6DSX_ID_ACC] = {
145-
.chan = st_lsm6dsx_acc_channels,
146-
.len = ARRAY_SIZE(st_lsm6dsx_acc_channels),
152+
.chan = st_lsm6ds0_acc_channels,
153+
.len = ARRAY_SIZE(st_lsm6ds0_acc_channels),
147154
},
148155
[ST_LSM6DSX_ID_GYRO] = {
149156
.chan = st_lsm6ds0_gyro_channels,
@@ -1449,8 +1456,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
14491456
},
14501457
.channels = {
14511458
[ST_LSM6DSX_ID_ACC] = {
1452-
.chan = st_lsm6dsx_acc_channels,
1453-
.len = ARRAY_SIZE(st_lsm6dsx_acc_channels),
1459+
.chan = st_lsm6ds0_acc_channels,
1460+
.len = ARRAY_SIZE(st_lsm6ds0_acc_channels),
14541461
},
14551462
[ST_LSM6DSX_ID_GYRO] = {
14561463
.chan = st_lsm6dsx_gyro_channels,

0 commit comments

Comments
 (0)