Message ID | b41ebda5535895298716c76d939f9f165fcd2d13.1644098120.git.lorenzo@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2] iio: imu: st_lsm6dsx: wait for settling time in st_lsm6dsx_read_oneshot | expand |
On Sat, 5 Feb 2022 22:57:42 +0100 Lorenzo Bianconi <lorenzo@kernel.org> wrote: > We need to wait for sensor settling time (~ 3/ODR) before reading data > in st_lsm6dsx_read_oneshot routine in order to avoid corrupted samples. > > Fixes: 290a6ce11d938 ("iio: imu: add support to lsm6dsx driver") > Reported-by: Mario Tesi <mario.tesi@st.com> > Tested-by: Mario Tesi <mario.tesi@st.com> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Thanks for the quick update. Applied to the fixes-togreg branch of iio.git and marked for stable. > --- > Changes since v1: > - add missing Fixes tag. > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > index 727b4b6ac696..93f0c6bce502 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > @@ -1374,8 +1374,12 @@ static int st_lsm6dsx_read_oneshot(struct st_lsm6dsx_sensor *sensor, > if (err < 0) > return err; > > + /* > + * we need to wait for sensor settling time before > + * reading data in order to avoid corrupted samples > + */ > delay = 1000000000 / sensor->odr; > - usleep_range(delay, 2 * delay); > + usleep_range(3 * delay, 4 * delay); > > err = st_lsm6dsx_read_locked(hw, addr, &data, sizeof(data)); > if (err < 0)
diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c index 727b4b6ac696..93f0c6bce502 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -1374,8 +1374,12 @@ static int st_lsm6dsx_read_oneshot(struct st_lsm6dsx_sensor *sensor, if (err < 0) return err; + /* + * we need to wait for sensor settling time before + * reading data in order to avoid corrupted samples + */ delay = 1000000000 / sensor->odr; - usleep_range(delay, 2 * delay); + usleep_range(3 * delay, 4 * delay); err = st_lsm6dsx_read_locked(hw, addr, &data, sizeof(data)); if (err < 0)