[RESEND PATCH 10/14] iio: chemical: scd30: poll own trigger from interrupt handler
From: Jonathan Cameron
Date: Sun Nov 08 2026 - 23:34:12 EST
From: Jonathan Cameron <jonathan.cameron@xxxxxxxxxxxxxxxx>
Keep a pointer to the driver's trigger in struct scd30_state and poll
that from scd30_irq_handler() rather than indio_dev->trig. With the
buffer enabled, the interrupt is only enabled by the trigger's
set_trigger_state() callback, so it is the driver's own trigger that is
in use.
This removes a dependency on the trig field of struct iio_dev, which
is to become private to the IIO core.
Signed-off-by: Jonathan Cameron <jonathan.cameron@xxxxxxxxxxxxxxxx>
---
drivers/iio/chemical/scd30.h | 2 ++
drivers/iio/chemical/scd30_core.c | 4 +++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/chemical/scd30.h b/drivers/iio/chemical/scd30.h
index 1ac9f3f79271..bdec5cf62a26 100644
--- a/drivers/iio/chemical/scd30.h
+++ b/drivers/iio/chemical/scd30.h
@@ -9,6 +9,7 @@
#include <linux/regulator/consumer.h>
#include <linux/types.h>
+struct iio_trigger;
struct scd30_state;
enum scd30_cmd {
@@ -57,6 +58,7 @@ struct scd30_state {
*/
void *priv;
int irq;
+ struct iio_trigger *trig;
/*
* no way to retrieve current ambient pressure compensation value from
* the sensor so keep one around
diff --git a/drivers/iio/chemical/scd30_core.c b/drivers/iio/chemical/scd30_core.c
index 770571c21521..ca824436f60e 100644
--- a/drivers/iio/chemical/scd30_core.c
+++ b/drivers/iio/chemical/scd30_core.c
@@ -573,9 +573,10 @@ static void scd30_disable_regulator(void *data)
static irqreturn_t scd30_irq_handler(int irq, void *priv)
{
struct iio_dev *indio_dev = priv;
+ struct scd30_state *state = iio_priv(indio_dev);
if (iio_buffer_enabled(indio_dev)) {
- iio_trigger_poll(indio_dev->trig);
+ iio_trigger_poll(state->trig);
return IRQ_HANDLED;
}
@@ -666,6 +667,7 @@ static int scd30_setup_trigger(struct iio_dev *indio_dev)
if (!trig)
return -ENOMEM;
+ state->trig = trig;
trig->ops = &scd30_trigger_ops;
iio_trigger_set_drvdata(trig, indio_dev);
--
2.56.0