Skip to contentSkip to conversation

iio: imu: st_lsm6dsx: irq not handled unless data pushed to buffers

PATCH In review Jorge Ramirez-Ortiz 2 participants 10 messages Jul 11, 2018 – Jul 12, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 iio: imu: st_lsm6dsx: irq not handled unless data pushed to buffers

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

This commit just extends the same semantics to fifo read errors.

---
 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +1 -1
index 4994f92..4959923 100644
@@ -472,7 +472,7 @@ static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
 	count = st_lsm6dsx_read_fifo(hw);
 	mutex_unlock(&hw->fifo_lock);
 
-	return !count ? IRQ_NONE : IRQ_HANDLED;
+	return (!count || count < 0) ? IRQ_NONE : IRQ_HANDLED;
 }
 
 static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
Signature · 1 line
2.7.4
#1 lore raw
Quoted 7 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Regards,
Lorenzo

Quoted 22 lines
---
 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +1 -1
index 4994f92..4959923 100644
@@ -472,7 +472,7 @@ static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
 	count = st_lsm6dsx_read_fifo(hw);
 	mutex_unlock(&hw->fifo_lock);
 
-	return !count ? IRQ_NONE : IRQ_HANDLED;
+	return (!count || count < 0) ? IRQ_NONE : IRQ_HANDLED;
 }
 
 static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
Signature · 1 line
2.7.4
#2 lore raw
Quoted 6 lines · Lorenzo Bianconi
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq. do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

thanks for coming back to me despite the bad patch

Quoted 25 lines

Regards,
Lorenzo

Quoted 21 lines
---
  drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +1 -1
index 4994f92..4959923 100644
@@ -472,7 +472,7 @@ static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
  	count = st_lsm6dsx_read_fifo(hw);
  	mutex_unlock(&hw->fifo_lock);
 
-	return !count ? IRQ_NONE : IRQ_HANDLED;
+	return (!count || count < 0) ? IRQ_NONE : IRQ_HANDLED;
  }
 
  static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
Signature · 1 line
2.7.4
#3 lore raw
Quoted 14 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 5 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.

No worries, but it is not a good idea to add that info in irq/spurious

Quoted 3 lines

do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

Could be usefull, afaiu you need to know if fifo read fails for any reason, correct?

Quoted 2 lines

thanks for coming back to me despite the bad patch

No worries :)

Regards,
Lorenzo

Quoted 25 lines
Quoted 24 lines

Regards,
Lorenzo

Quoted 19 lines
---
  drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +1 -1
index 4994f92..4959923 100644
@@ -472,7 +472,7 @@ static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
  	count = st_lsm6dsx_read_fifo(hw);
  	mutex_unlock(&hw->fifo_lock);
-	return !count ? IRQ_NONE : IRQ_HANDLED;
+	return (!count || count < 0) ? IRQ_NONE : IRQ_HANDLED;
  }
  static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
Signature · 1 line
2.7.4
#4 lore raw
In reply to Jorge Ramirez-Ortiz
Quoted 14 lines · Jorge Ramirez-Ortiz
Quoted 6 lines · Lorenzo Bianconi
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
 	err = regmap_bulk_read(hw->regmap,
 			       hw->settings->fifo_ops.fifo_diff.addr,
 			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
 		return err;
+	}
 
 	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
 		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
 
 	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
 		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
 			return err;
+		}
 
 		/*
 		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
 
 	if (unlikely(reset_ts)) {
 		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
 			return err;
+		}
 	}
 	return read_len;
 }

Regards,
Lorenzo

Quoted 27 lines

thanks for coming back to me despite the bad patch

Quoted 23 lines

Regards,
Lorenzo

Quoted 19 lines
---
  drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +1 -1
index 4994f92..4959923 100644
@@ -472,7 +472,7 @@ static irqreturn_t st_lsm6dsx_handler_thread(int irq, void *private)
  	count = st_lsm6dsx_read_fifo(hw);
  	mutex_unlock(&hw->fifo_lock);
-	return !count ? IRQ_NONE : IRQ_HANDLED;
+	return (!count || count < 0) ? IRQ_NONE : IRQ_HANDLED;
  }
  static int st_lsm6dsx_buffer_preenable(struct iio_dev *iio_dev)
Signature · 1 line
2.7.4
#5 lore raw
Quoted 67 lines · Lorenzo Bianconi
Quoted 13 lines · Jorge Ramirez-Ortiz
Quoted 6 lines · Lorenzo Bianconi
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
  	err = regmap_bulk_read(hw->regmap,
  			       hw->settings->fifo_ops.fifo_diff.addr,
  			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
  		return err;
+	}
 
  	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
  		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
 
  	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
  		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
  			return err;
+		}
 
  		/*
  		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
 
  	if (unlikely(reset_ts)) {
  		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
  			return err;
+		}
  	}
  	return read_len;
  }
Quoted 2 lines

Regards,
Lorenzo

yes, you beat me to it but yes, that is what I was thinking about.

#6 lore raw
Quoted 64 lines · Lorenzo Bianconi
Quoted 63 lines · Jorge Ramirez-Ortiz
Quoted 13 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
  	err = regmap_bulk_read(hw->regmap,
  			       hw->settings->fifo_ops.fifo_diff.addr,
  			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
  		return err;
+	}
  	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
  		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
  	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
  		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
  			return err;
+		}
  		/*
  		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
  	if (unlikely(reset_ts)) {
  		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
  			return err;
+		}
  	}
  	return read_len;
  }
 
Quoted 6 lines
Quoted 2 lines

Regards,
Lorenzo

yes, you beat me to it but yes, that is what I was thinking about.

Ops, it was not intended as a race :). Feel free to send your patch since you proposed the idea.

Regards,
Lorenzo

Quoted 1 line
#7 lore raw
Quoted 64 lines · Lorenzo Bianconi
Quoted 64 lines · Lorenzo Bianconi
Quoted 63 lines · Jorge Ramirez-Ortiz
Quoted 13 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	err = regmap_bulk_read(hw->regmap,
   			       hw->settings->fifo_ops.fifo_diff.addr,
   			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
   		return err;
+	}
   	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
   		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
   		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
   			return err;
+		}
   		/*
   		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	if (unlikely(reset_ts)) {
   		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
   			return err;
+		}
   	}
   	return read_len;
   }
 
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

Regards,
Lorenzo

yes, you beat me to it but yes, that is what I was thinking about.

Ops, it was not intended as a race :). Feel free to send your patch since you proposed the idea.

hey of course not :) please go ahead with your change! got to start packing for my summer break anyways :)

I was working this morning validating the driver on the LSM6DS33TR with libiio and it is all good btw.

#8 lore raw
Quoted 70 lines · Jorge Ramirez-Ortiz
Quoted 69 lines · Lorenzo Bianconi
Quoted 69 lines · Lorenzo Bianconi
Quoted 63 lines · Jorge Ramirez-Ortiz
Quoted 13 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	err = regmap_bulk_read(hw->regmap,
   			       hw->settings->fifo_ops.fifo_diff.addr,
   			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
   		return err;
+	}
   	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
   		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
   		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
   			return err;
+		}
   		/*
   		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	if (unlikely(reset_ts)) {
   		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
   			return err;
+		}
   	}
   	return read_len;
   }
 
Quoted 2 lines

Regards,
Lorenzo

yes, you beat me to it but yes, that is what I was thinking about.

Quoted 5 lines
Quoted 2 lines

Ops, it was not intended as a race :). Feel free to send your patch since you proposed the idea.

hey of course not :) please go ahead with your change! got to start packing for my summer break anyways :)

Ok, will post a patch adding that stuff. Have a nice vacation ;)

Quoted 4 lines

I was working this morning validating the driver on the LSM6DS33TR with libiio and it is all good btw.

Cool!

Quoted 3 lines
#9 lore raw
In reply to Jorge Ramirez-Ortiz
Quoted 70 lines · Lorenzo Bianconi
Quoted 69 lines
Quoted 69 lines · Lorenzo Bianconi
Quoted 63 lines · Jorge Ramirez-Ortiz
Quoted 13 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 6 lines

Currently IRQ_NONE is returned only when there is no data on the fifo.

When there is no data on the fifo the driver can not push to the buffers and therefore user space readers polling for data available will not be awoken and continue to wait.

Quoted 6 lines
Quoted 1 line

This commit just extends the same semantics to fifo read errors.

Hi Jorge,

IRQ_NONE is used to indicate this interrupt is not intended for this driver (this could happen if the irq line is in open-drain). If the interrupt is for st_lsm6dsx I would prefer to return IRQ_HANDLED even in case of error.

Quoted 8 lines

yes I understand.

This was just a trivial attempt (I guess a really bad idea) to get some debug info (via /proc/irq/.../spurious) any time the driver read (spi/i2c) fails when processing the data ready irq.
do you think it would make sense to add a dev_err to st_lsm6dsx_i2c_read/st_lsm6dsx_spi_read? at the moment the driver would fail silently

do you mean something like (just compiled, not tested):

drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +13 -3
@@ -298,8 +298,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	err = regmap_bulk_read(hw->regmap,
   			       hw->settings->fifo_ops.fifo_diff.addr,
   			       &fifo_status, sizeof(fifo_status));
-	if (err < 0)
+	if (err < 0) {
+		dev_err(hw->dev, "failed to read fifo status reg (err=%d)\n",
+			err);
   		return err;
+	}
   	if (fifo_status & cpu_to_le16(ST_LSM6DSX_FIFO_EMPTY_MASK))
   		return 0;
@@ -313,8 +316,12 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
   		err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev,
+				"failed to read pattern from fifo (err=%d)\n",
+				err);
   			return err;
+		}
   		/*
   		 * Data are written to the FIFO with a specific pattern
@@ -385,8 +392,11 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
   	if (unlikely(reset_ts)) {
   		err = st_lsm6dsx_reset_hw_ts(hw);
-		if (err < 0)
+		if (err < 0) {
+			dev_err(hw->dev, "failed to reset hw ts (err=%d)\n",
+				err);
   			return err;
+		}
   	}
   	return read_len;
   }
 
Quoted 2 lines

Regards,
Lorenzo

yes, you beat me to it but yes, that is what I was thinking about.

Quoted 8 lines
Quoted 2 lines

Ops, it was not intended as a race :). Feel free to send your patch since you proposed the idea.

hey of course not :) please go ahead with your change! got to start packing for my summer break anyways :)

I was working this morning validating the driver on the LSM6DS33TR with libiio and it is all good btw.

According to the wai, LSM6DS33TR should be compatible with LSM6DS3/LSM6DS3H (I just looked at wai val, not all ds). If so I guess you can add explicit support for it (after your vacation :))

Regards,
Lorenzo

Quoted 4 lines