1 #include <linux/interrupt.h>
3 #include <linux/mutex.h>
4 #include <linux/device.h>
5 #include <linux/kernel.h>
6 #include <linux/sysfs.h>
7 #include <linux/list.h>
8 #include <linux/spi/spi.h>
12 #include "../trigger.h"
13 #include "adis16209.h"
16 * adis16209_data_rdy_trig_poll() the event handler for the data rdy trig
18 static irqreturn_t adis16209_data_rdy_trig_poll(int irq, void *trig)
20 iio_trigger_poll(trig, iio_get_time_ns());
24 static IIO_TRIGGER_NAME_ATTR;
26 static struct attribute *adis16209_trigger_attrs[] = {
31 static const struct attribute_group adis16209_trigger_attr_group = {
32 .attrs = adis16209_trigger_attrs,
36 * adis16209_data_rdy_trigger_set_state() set datardy interrupt state
38 static int adis16209_data_rdy_trigger_set_state(struct iio_trigger *trig,
41 struct adis16209_state *st = trig->private_data;
42 struct iio_dev *indio_dev = st->indio_dev;
44 dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state);
45 return adis16209_set_irq(st->indio_dev, state);
48 int adis16209_probe_trigger(struct iio_dev *indio_dev)
51 struct adis16209_state *st = indio_dev->dev_data;
54 name = kasprintf(GFP_KERNEL,
62 st->trig = iio_allocate_trigger_named(name);
63 if (st->trig == NULL) {
68 ret = request_irq(st->us->irq,
69 adis16209_data_rdy_trig_poll,
75 st->trig->dev.parent = &st->us->dev;
76 st->trig->owner = THIS_MODULE;
77 st->trig->private_data = st;
78 st->trig->set_trigger_state = &adis16209_data_rdy_trigger_set_state;
79 st->trig->control_attrs = &adis16209_trigger_attr_group;
80 ret = iio_trigger_register(st->trig);
82 /* select default trigger */
83 indio_dev->trig = st->trig;
90 free_irq(st->us->irq, st->trig);
92 iio_free_trigger(st->trig);
99 void adis16209_remove_trigger(struct iio_dev *indio_dev)
101 struct adis16209_state *state = indio_dev->dev_data;
103 iio_trigger_unregister(state->trig);
104 kfree(state->trig->name);
105 free_irq(state->us->irq, state->trig);
106 iio_free_trigger(state->trig);