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 int adis16209_data_rdy_trig_poll(struct iio_dev
*dev_info
,
23 struct adis16209_state
*st
= iio_dev_get_devdata(dev_info
);
24 struct iio_trigger
*trig
= st
->trig
;
26 iio_trigger_poll(trig
, timestamp
);
31 IIO_EVENT_SH(data_rdy_trig
, &adis16209_data_rdy_trig_poll
);
33 static DEVICE_ATTR(name
, S_IRUGO
, iio_trigger_read_name
, NULL
);
35 static struct attribute
*adis16209_trigger_attrs
[] = {
40 static const struct attribute_group adis16209_trigger_attr_group
= {
41 .attrs
= adis16209_trigger_attrs
,
45 * adis16209_data_rdy_trigger_set_state() set datardy interrupt state
47 static int adis16209_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
50 struct adis16209_state
*st
= trig
->private_data
;
51 struct iio_dev
*indio_dev
= st
->indio_dev
;
54 dev_dbg(&indio_dev
->dev
, "%s (%d)\n", __func__
, state
);
55 ret
= adis16209_set_irq(&st
->indio_dev
->dev
, state
);
57 iio_remove_event_from_list(&iio_event_data_rdy_trig
,
58 &indio_dev
->interrupts
[0]
60 flush_scheduled_work();
62 iio_add_event_to_list(&iio_event_data_rdy_trig
,
63 &indio_dev
->interrupts
[0]->ev_list
);
69 * adis16209_trig_try_reen() try renabling irq for data rdy trigger
70 * @trig: the datardy trigger
72 static int adis16209_trig_try_reen(struct iio_trigger
*trig
)
74 struct adis16209_state
*st
= trig
->private_data
;
75 enable_irq(st
->us
->irq
);
79 int adis16209_probe_trigger(struct iio_dev
*indio_dev
)
82 struct adis16209_state
*st
= indio_dev
->dev_data
;
84 st
->trig
= iio_allocate_trigger();
85 st
->trig
->name
= kasprintf(GFP_KERNEL
,
88 if (!st
->trig
->name
) {
92 st
->trig
->dev
.parent
= &st
->us
->dev
;
93 st
->trig
->owner
= THIS_MODULE
;
94 st
->trig
->private_data
= st
;
95 st
->trig
->set_trigger_state
= &adis16209_data_rdy_trigger_set_state
;
96 st
->trig
->try_reenable
= &adis16209_trig_try_reen
;
97 st
->trig
->control_attrs
= &adis16209_trigger_attr_group
;
98 ret
= iio_trigger_register(st
->trig
);
100 /* select default trigger */
101 indio_dev
->trig
= st
->trig
;
103 goto error_free_trig_name
;
107 error_free_trig_name
:
108 kfree(st
->trig
->name
);
110 iio_free_trigger(st
->trig
);
115 void adis16209_remove_trigger(struct iio_dev
*indio_dev
)
117 struct adis16209_state
*state
= indio_dev
->dev_data
;
119 iio_trigger_unregister(state
->trig
);
120 kfree(state
->trig
->name
);
121 iio_free_trigger(state
->trig
);