Skip to content

Commit 74f5683

Browse files
gbarba-stmjic23
authored andcommitted
iio: st_magn: Add irq trigger handling
Add irq trigger handling for magnetometer also Signed-off-by: Giuseppe Barba <giuseppe.barba@st.com> Acked-by: Denis Ciocca <denis.ciocca@st.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
1 parent bb602f8 commit 74f5683

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

drivers/iio/magnetometer/st_magn.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ void st_magn_common_remove(struct iio_dev *indio_dev);
2525
#ifdef CONFIG_IIO_BUFFER
2626
int st_magn_allocate_ring(struct iio_dev *indio_dev);
2727
void st_magn_deallocate_ring(struct iio_dev *indio_dev);
28+
int st_magn_trig_set_state(struct iio_trigger *trig, bool state);
29+
#define ST_MAGN_TRIGGER_SET_STATE (&st_magn_trig_set_state)
2830
#else /* CONFIG_IIO_BUFFER */
2931
static inline int st_magn_probe_trigger(struct iio_dev *indio_dev, int irq)
3032
{

drivers/iio/magnetometer/st_magn_buffer.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
#include <linux/iio/common/st_sensors.h>
2424
#include "st_magn.h"
2525

26+
int st_magn_trig_set_state(struct iio_trigger *trig, bool state)
27+
{
28+
struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
29+
30+
return st_sensors_set_dataready_irq(indio_dev, state);
31+
}
32+
2633
static int st_magn_buffer_preenable(struct iio_dev *indio_dev)
2734
{
2835
return st_sensors_set_enable(indio_dev, true);

drivers/iio/magnetometer/st_magn_core.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,16 @@ static const struct iio_info magn_info = {
480480
.write_raw = &st_magn_write_raw,
481481
};
482482

483+
#ifdef CONFIG_IIO_TRIGGER
484+
static const struct iio_trigger_ops st_magn_trigger_ops = {
485+
.owner = THIS_MODULE,
486+
.set_trigger_state = ST_MAGN_TRIGGER_SET_STATE,
487+
};
488+
#define ST_MAGN_TRIGGER_OPS (&st_magn_trigger_ops)
489+
#else
490+
#define ST_MAGN_TRIGGER_OPS NULL
491+
#endif
492+
483493
int st_magn_common_probe(struct iio_dev *indio_dev)
484494
{
485495
struct st_sensor_data *mdata = iio_priv(indio_dev);
@@ -516,7 +526,8 @@ int st_magn_common_probe(struct iio_dev *indio_dev)
516526
return err;
517527

518528
if (irq > 0) {
519-
err = st_sensors_allocate_trigger(indio_dev, NULL);
529+
err = st_sensors_allocate_trigger(indio_dev,
530+
ST_MAGN_TRIGGER_OPS);
520531
if (err < 0)
521532
goto st_magn_probe_trigger_error;
522533
}

0 commit comments

Comments
 (0)