mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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: 213451076b ("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>
			
			
This commit is contained in:
		
							parent
							
								
									65099ea85e
								
							
						
					
					
						commit
						a13bf65f3f
					
				
					 1 changed files with 6 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -187,12 +187,15 @@ static int st_lsm6dsx_set_fifo_odr(struct st_lsm6dsx_sensor *sensor,
 | 
			
		|||
 | 
			
		||||
int st_lsm6dsx_update_watermark(struct st_lsm6dsx_sensor *sensor, u16 watermark)
 | 
			
		||||
{
 | 
			
		||||
	u16 fifo_watermark = ~0, cur_watermark, sip = 0, fifo_th_mask;
 | 
			
		||||
	u16 fifo_watermark = ~0, cur_watermark, fifo_th_mask;
 | 
			
		||||
	struct st_lsm6dsx_hw *hw = sensor->hw;
 | 
			
		||||
	struct st_lsm6dsx_sensor *cur_sensor;
 | 
			
		||||
	int i, err, data;
 | 
			
		||||
	__le16 wdata;
 | 
			
		||||
 | 
			
		||||
	if (!hw->sip)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < ST_LSM6DSX_ID_MAX; i++) {
 | 
			
		||||
		cur_sensor = iio_priv(hw->iio_devs[i]);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -203,14 +206,10 @@ int st_lsm6dsx_update_watermark(struct st_lsm6dsx_sensor *sensor, u16 watermark)
 | 
			
		|||
						       : cur_sensor->watermark;
 | 
			
		||||
 | 
			
		||||
		fifo_watermark = min_t(u16, fifo_watermark, cur_watermark);
 | 
			
		||||
		sip += cur_sensor->sip;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!sip)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	fifo_watermark = max_t(u16, fifo_watermark, sip);
 | 
			
		||||
	fifo_watermark = (fifo_watermark / sip) * sip;
 | 
			
		||||
	fifo_watermark = max_t(u16, fifo_watermark, hw->sip);
 | 
			
		||||
	fifo_watermark = (fifo_watermark / hw->sip) * hw->sip;
 | 
			
		||||
	fifo_watermark = fifo_watermark * hw->settings->fifo_ops.th_wl;
 | 
			
		||||
 | 
			
		||||
	err = regmap_read(hw->regmap, hw->settings->fifo_ops.fifo_th.addr + 1,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue