sensor: all: Fix missing result argument on RTIO callbacks
If there's an error/result checked, consider the callback result in
such solution.
Signed-off-by: Luis Ubieda <luisf@croxel.com>
diff --git a/drivers/sensor/pixart/paa3905/paa3905_stream.c b/drivers/sensor/pixart/paa3905/paa3905_stream.c
index 3f8b281..3984da5 100644
--- a/drivers/sensor/pixart/paa3905/paa3905_stream.c
+++ b/drivers/sensor/pixart/paa3905/paa3905_stream.c
@@ -59,6 +59,7 @@
static void paa3905_complete_result(struct rtio *ctx,
const struct rtio_sqe *sqe,
+ int err,
void *arg)
{
const struct device *dev = (const struct device *)arg;
@@ -66,7 +67,6 @@
struct rtio_iodev_sqe *iodev_sqe = data->stream.iodev_sqe;
struct paa3905_encoded_data *edata = sqe->userdata;
struct rtio_cqe *cqe;
- int err;
edata->header.events.drdy = true &&
data->stream.settings.enabled.drdy;
@@ -85,6 +85,22 @@
start_drdy_backup_timer(dev);
}
+ /* Flush RTIO bus CQEs */
+ do {
+ cqe = rtio_cqe_consume(ctx);
+ if (cqe != NULL) {
+ if (err >= 0) {
+ err = cqe->result;
+ }
+ rtio_cqe_release(ctx, cqe);
+ }
+ } while (cqe != NULL);
+
+ if (err < 0) {
+ rtio_iodev_sqe_err(iodev_sqe, err);
+ return;
+ }
+
/** Attempt chip recovery if erratic behavior is detected */
if (!REG_OBSERVATION_CHIP_OK(edata->observation)) {
@@ -101,15 +117,6 @@
} else {
rtio_iodev_sqe_ok(iodev_sqe, 0);
}
-
- /* Flush RTIO bus CQEs */
- do {
- cqe = rtio_cqe_consume(ctx);
- if (cqe != NULL) {
- err = cqe->result;
- rtio_cqe_release(ctx, cqe);
- }
- } while (cqe != NULL);
}
static void paa3905_stream_get_data(const struct device *dev)
diff --git a/drivers/sensor/pixart/pat9136/pat9136_stream.c b/drivers/sensor/pixart/pat9136/pat9136_stream.c
index 3f7bff7..3a1e1e6 100644
--- a/drivers/sensor/pixart/pat9136/pat9136_stream.c
+++ b/drivers/sensor/pixart/pat9136/pat9136_stream.c
@@ -45,6 +45,7 @@
static void pat9136_complete_result(struct rtio *ctx,
const struct rtio_sqe *sqe,
+ int result,
void *arg)
{
const struct device *dev = (const struct device *)arg;
@@ -74,11 +75,13 @@
/** Attempt chip recovery if erratic behavior is detected */
if (!REG_OBSERVATION_READ_IS_VALID(edata->observation)) {
-
LOG_WRN("CHIP OK register indicates issues. Attempting chip recovery: 0x%02X",
edata->observation);
+ result = -EAGAIN;
+ }
- rtio_iodev_sqe_err(iodev_sqe, -EAGAIN);
+ if (result < 0) {
+ rtio_iodev_sqe_err(iodev_sqe, result);
} else {
rtio_iodev_sqe_ok(iodev_sqe, 0);
}
diff --git a/drivers/sensor/pni/rm3100/rm3100_stream.c b/drivers/sensor/pni/rm3100/rm3100_stream.c
index d56a443..597585e 100644
--- a/drivers/sensor/pni/rm3100/rm3100_stream.c
+++ b/drivers/sensor/pni/rm3100/rm3100_stream.c
@@ -16,13 +16,13 @@
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(RM3100_STREAM, CONFIG_SENSOR_LOG_LEVEL);
-static void rm3100_complete_result(struct rtio *ctx, const struct rtio_sqe *sqe, void *arg)
+static void rm3100_complete_result(struct rtio *ctx, const struct rtio_sqe *sqe, int err,
+ void *arg)
{
const struct device *dev = (const struct device *)arg;
struct rm3100_data *data = dev->data;
struct rtio_iodev_sqe *iodev_sqe = data->stream.iodev_sqe;
struct rtio_cqe *cqe;
- int err = 0;
struct rm3100_encoded_data *edata = sqe->userdata;
edata->header.events.drdy = ((edata->header.status != 0) &&
@@ -39,7 +39,9 @@
do {
cqe = rtio_cqe_consume(ctx);
if (cqe != NULL) {
- err = cqe->result;
+ if (err >= 0) {
+ err = cqe->result;
+ }
rtio_cqe_release(ctx, cqe);
}
} while (cqe != NULL);