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 * adis16260_data_rdy_trigger_set_state() set datardy interrupt state
13 static int adis16260_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 adis16260_set_irq(indio_dev
, state
);
22 static const struct iio_trigger_ops adis16260_trigger_ops
= {
24 .set_trigger_state
= &adis16260_data_rdy_trigger_set_state
,
27 int adis16260_probe_trigger(struct iio_dev
*indio_dev
)
30 struct adis16260_state
*st
= iio_priv(indio_dev
);
32 st
->trig
= iio_trigger_alloc("%s-dev%d",
33 spi_get_device_id(st
->us
)->name
,
35 if (st
->trig
== NULL
) {
40 ret
= request_irq(st
->us
->irq
,
41 &iio_trigger_generic_data_rdy_poll
,
48 st
->trig
->dev
.parent
= &st
->us
->dev
;
49 st
->trig
->ops
= &adis16260_trigger_ops
;
50 st
->trig
->private_data
= indio_dev
;
51 ret
= iio_trigger_register(st
->trig
);
53 /* select default trigger */
54 indio_dev
->trig
= st
->trig
;
61 free_irq(st
->us
->irq
, st
->trig
);
63 iio_trigger_free(st
->trig
);
68 void adis16260_remove_trigger(struct iio_dev
*indio_dev
)
70 struct adis16260_state
*st
= iio_priv(indio_dev
);
72 iio_trigger_unregister(st
->trig
);
73 free_irq(st
->us
->irq
, st
->trig
);
74 iio_trigger_free(st
->trig
);