| From 8b134d75b6ec7cc417b8a6e8eb8edab36a8e95f0 Mon Sep 17 00:00:00 2001 |
| From: Lorenzo Bianconi <lorenzo@kernel.org> |
| Date: Sun, 27 Oct 2019 19:02:30 +0100 |
| Subject: [PATCH] iio: imu: st_lsm6dsx: fix ODR check in st_lsm6dsx_write_raw |
| |
| commit fc3f6ad7f5dc6c899fbda0255865737bac88c2e0 upstream. |
| |
| Since st_lsm6dsx i2c master controller relies on accel device as trigger |
| and slave devices can run at different ODRs we must select an accel_odr >= |
| slave_odr. Report real accel ODR in st_lsm6dsx_check_odr() in order to |
| properly set sensor frequency in st_lsm6dsx_write_raw and avoid to |
| report unsupported frequency |
| |
| Fixes: 6ffb55e5009ff ("iio: imu: st_lsm6dsx: introduce ST_LSM6DSX_ID_EXT sensor ids") |
| Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> |
| Cc: <Stable@vger.kernel.org> |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c |
| index 58b6e35a52e8..6e5fbf5038dd 100644 |
| --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c |
| +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c |
| @@ -679,8 +679,7 @@ int st_lsm6dsx_check_odr(struct st_lsm6dsx_sensor *sensor, u16 odr, u8 *val) |
| return -EINVAL; |
| |
| *val = odr_table->odr_avl[i].val; |
| - |
| - return 0; |
| + return odr_table->odr_avl[i].hz; |
| } |
| |
| static u16 st_lsm6dsx_check_odr_dependency(struct st_lsm6dsx_hw *hw, u16 odr, |
| @@ -843,8 +842,10 @@ static int st_lsm6dsx_write_raw(struct iio_dev *iio_dev, |
| case IIO_CHAN_INFO_SAMP_FREQ: { |
| u8 data; |
| |
| - err = st_lsm6dsx_check_odr(sensor, val, &data); |
| - if (!err) |
| + val = st_lsm6dsx_check_odr(sensor, val, &data); |
| + if (val < 0) |
| + err = val; |
| + else |
| sensor->odr = val; |
| break; |
| } |
| -- |
| 2.7.4 |
| |