diff options
author | Lorenzo Bianconi <lorenzo.bianconi@redhat.com> | 2018-08-31 04:51:14 -0400 |
---|---|---|
committer | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2018-09-02 16:19:53 -0400 |
commit | a13bf65f3f2e36008ea60b49d3bda2527e09fd9c (patch) | |
tree | 936dd02a609bded464855afb80d4e8d54f70299e | |
parent | 65099ea85e885c3ea1272eca8774b771419d8ce8 (diff) |
iio: imu: st_lsm6dsx: take into account ts samples in wm configuration
Take into account hw timer samples in pattern length computation done
in st_lsm6dsx_update_watermark routine for watermark configuration.
Moreover use samples in pattern (sip) already computed in
st_lsm6dsx_update_decimators routine
Fixes: 213451076bd3 ("iio: imu: st_lsm6dsx: add hw timestamp support")
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r-- | drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c index 7589f2ad1dae..631360b14ca7 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | |||
@@ -187,12 +187,15 @@ static int st_lsm6dsx_set_fifo_odr(struct st_lsm6dsx_sensor *sensor, | |||
187 | 187 | ||
188 | int st_lsm6dsx_update_watermark(struct st_lsm6dsx_sensor *sensor, u16 watermark) | 188 | int st_lsm6dsx_update_watermark(struct st_lsm6dsx_sensor *sensor, u16 watermark) |
189 | { | 189 | { |
190 | u16 fifo_watermark = ~0, cur_watermark, sip = 0, fifo_th_mask; | 190 | u16 fifo_watermark = ~0, cur_watermark, fifo_th_mask; |
191 | struct st_lsm6dsx_hw *hw = sensor->hw; | 191 | struct st_lsm6dsx_hw *hw = sensor->hw; |
192 | struct st_lsm6dsx_sensor *cur_sensor; | 192 | struct st_lsm6dsx_sensor *cur_sensor; |
193 | int i, err, data; | 193 | int i, err, data; |
194 | __le16 wdata; | 194 | __le16 wdata; |
195 | 195 | ||
196 | if (!hw->sip) | ||
197 | return 0; | ||
198 | |||
196 | for (i = 0; i < ST_LSM6DSX_ID_MAX; i++) { | 199 | for (i = 0; i < ST_LSM6DSX_ID_MAX; i++) { |
197 | cur_sensor = iio_priv(hw->iio_devs[i]); | 200 | cur_sensor = iio_priv(hw->iio_devs[i]); |
198 | 201 | ||
@@ -203,14 +206,10 @@ int st_lsm6dsx_update_watermark(struct st_lsm6dsx_sensor *sensor, u16 watermark) | |||
203 | : cur_sensor->watermark; | 206 | : cur_sensor->watermark; |
204 | 207 | ||
205 | fifo_watermark = min_t(u16, fifo_watermark, cur_watermark); | 208 | fifo_watermark = min_t(u16, fifo_watermark, cur_watermark); |
206 | sip += cur_sensor->sip; | ||
207 | } | 209 | } |
208 | 210 | ||
209 | if (!sip) | 211 | fifo_watermark = max_t(u16, fifo_watermark, hw->sip); |
210 | return 0; | 212 | fifo_watermark = (fifo_watermark / hw->sip) * hw->sip; |
211 | |||
212 | fifo_watermark = max_t(u16, fifo_watermark, sip); | ||
213 | fifo_watermark = (fifo_watermark / sip) * sip; | ||
214 | fifo_watermark = fifo_watermark * hw->settings->fifo_ops.th_wl; | 213 | fifo_watermark = fifo_watermark * hw->settings->fifo_ops.th_wl; |
215 | 214 | ||
216 | err = regmap_read(hw->regmap, hw->settings->fifo_ops.fifo_th.addr + 1, | 215 | err = regmap_read(hw->regmap, hw->settings->fifo_ops.fifo_th.addr + 1, |