icm42699: Only clear interrupt status when setting trigger
Always clearing the interrupt status register was causing issues for
the sensor shell when interrupts were enabled but trying to read
one-off samples.
Signed-off-by: Yuval Peress <peress@google.com>
diff --git a/drivers/sensor/icm42688/icm42688_trigger.c b/drivers/sensor/icm42688/icm42688_trigger.c
index 01e555a..4bf728b 100644
--- a/drivers/sensor/icm42688/icm42688_trigger.c
+++ b/drivers/sensor/icm42688/icm42688_trigger.c
@@ -35,16 +35,11 @@
static void icm42688_thread_cb(const struct device *dev)
{
struct icm42688_dev_data *data = dev->data;
- const struct icm42688_dev_cfg *cfg = dev->config;
icm42688_lock(dev);
if (data->data_ready_handler != NULL) {
data->data_ready_handler(dev, data->data_ready_trigger);
- } else {
- uint8_t status;
-
- icm42688_spi_read(&cfg->spi, REG_INT_STATUS, &status, 1);
}
icm42688_unlock(dev);
@@ -81,6 +76,7 @@
{
struct icm42688_dev_data *data = dev->data;
const struct icm42688_dev_cfg *cfg = dev->config;
+ uint8_t status;
int res = 0;
if (trig == NULL || handler == NULL) {
@@ -94,6 +90,10 @@
case SENSOR_TRIG_DATA_READY:
data->data_ready_handler = handler;
data->data_ready_trigger = trig;
+
+ icm42688_lock(dev);
+ icm42688_spi_read(&cfg->spi, REG_INT_STATUS, &status, 1);
+ icm42688_unlock(dev);
break;
default:
res = -ENOTSUP;