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());
25 * adis16209_data_rdy_trigger_set_state() set datardy interrupt state
27 static int adis16209_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
30 struct adis16209_state
*st
= trig
->private_data
;
31 struct iio_dev
*indio_dev
= st
->indio_dev
;
33 dev_dbg(&indio_dev
->dev
, "%s (%d)\n", __func__
, state
);
34 return adis16209_set_irq(st
->indio_dev
, state
);
37 int adis16209_probe_trigger(struct iio_dev
*indio_dev
)
40 struct adis16209_state
*st
= indio_dev
->dev_data
;
42 st
->trig
= iio_allocate_trigger("adis16209-dev%d", indio_dev
->id
);
43 if (st
->trig
== NULL
) {
48 ret
= request_irq(st
->us
->irq
,
49 adis16209_data_rdy_trig_poll
,
55 st
->trig
->dev
.parent
= &st
->us
->dev
;
56 st
->trig
->owner
= THIS_MODULE
;
57 st
->trig
->private_data
= st
;
58 st
->trig
->set_trigger_state
= &adis16209_data_rdy_trigger_set_state
;
59 ret
= iio_trigger_register(st
->trig
);
61 /* select default trigger */
62 indio_dev
->trig
= st
->trig
;
69 free_irq(st
->us
->irq
, st
->trig
);
71 iio_free_trigger(st
->trig
);
76 void adis16209_remove_trigger(struct iio_dev
*indio_dev
)
78 struct adis16209_state
*state
= indio_dev
->dev_data
;
80 iio_trigger_unregister(state
->trig
);
81 free_irq(state
->us
->irq
, state
->trig
);
82 iio_free_trigger(state
->trig
);