1 #include <linux/interrupt.h>
2 #include <linux/kernel.h>
3 #include <linux/spi/spi.h>
4 #include <linux/export.h>
6 #include <linux/iio/iio.h>
7 #include <linux/iio/trigger.h>
11 * adis16400_data_rdy_trigger_set_state() set datardy interrupt state
13 static int adis16400_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
16 struct iio_dev
*indio_dev
= trig
->private_data
;
18 dev_dbg(&indio_dev
->dev
, "%s (%d)\n", __func__
, state
);
19 return adis16400_set_irq(indio_dev
, state
);
22 static const struct iio_trigger_ops adis16400_trigger_ops
= {
24 .set_trigger_state
= &adis16400_data_rdy_trigger_set_state
,
27 int adis16400_probe_trigger(struct iio_dev
*indio_dev
)
30 struct adis16400_state
*st
= iio_priv(indio_dev
);
32 st
->trig
= iio_allocate_trigger("%s-dev%d",
35 if (st
->trig
== NULL
) {
40 ret
= request_irq(st
->us
->irq
,
41 &iio_trigger_generic_data_rdy_poll
,
47 st
->trig
->dev
.parent
= &st
->us
->dev
;
48 st
->trig
->private_data
= indio_dev
;
49 st
->trig
->ops
= &adis16400_trigger_ops
;
50 ret
= iio_trigger_register(st
->trig
);
52 /* select default trigger */
53 indio_dev
->trig
= st
->trig
;
60 free_irq(st
->us
->irq
, st
->trig
);
62 iio_free_trigger(st
->trig
);
67 void adis16400_remove_trigger(struct iio_dev
*indio_dev
)
69 struct adis16400_state
*st
= iio_priv(indio_dev
);
71 iio_trigger_unregister(st
->trig
);
72 free_irq(st
->us
->irq
, st
->trig
);
73 iio_free_trigger(st
->trig
);