IIO: Move core headers to include/linux/iio
[deliverable/linux.git] / drivers / staging / iio / accel / adis16201_trigger.c
CommitLineData
f7fe1d1d 1#include <linux/interrupt.h>
f7fe1d1d 2#include <linux/kernel.h>
f7fe1d1d 3#include <linux/spi/spi.h>
8e336a72 4#include <linux/export.h>
f7fe1d1d 5
06458e27
JC
6#include <linux/iio/iio.h>
7#include <linux/iio/trigger.h>
f7fe1d1d
BS
8#include "adis16201.h"
9
f7fe1d1d
BS
10/**
11 * adis16201_data_rdy_trigger_set_state() set datardy interrupt state
12 **/
13static int adis16201_data_rdy_trigger_set_state(struct iio_trigger *trig,
14 bool state)
15{
d31907f3 16 struct iio_dev *indio_dev = trig->private_data;
f7fe1d1d
BS
17
18 dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state);
d31907f3 19 return adis16201_set_irq(indio_dev, state);
f7fe1d1d
BS
20}
21
d29f73db
JC
22static const struct iio_trigger_ops adis16201_trigger_ops = {
23 .owner = THIS_MODULE,
24 .set_trigger_state = &adis16201_data_rdy_trigger_set_state,
25};
26
f7fe1d1d
BS
27int adis16201_probe_trigger(struct iio_dev *indio_dev)
28{
29 int ret;
d31907f3 30 struct adis16201_state *st = iio_priv(indio_dev);
f7fe1d1d 31
59c85e82 32 st->trig = iio_allocate_trigger("adis16201-dev%d", indio_dev->id);
05c2858d
JC
33 if (st->trig == NULL) {
34 ret = -ENOMEM;
59c85e82 35 goto error_ret;
05c2858d 36 }
80782446 37 ret = request_irq(st->us->irq,
05c2858d 38 &iio_trigger_generic_data_rdy_poll,
80782446
JC
39 IRQF_TRIGGER_RISING,
40 "adis16201",
41 st->trig);
42 if (ret)
43 goto error_free_trig;
f7fe1d1d 44 st->trig->dev.parent = &st->us->dev;
d29f73db 45 st->trig->ops = &adis16201_trigger_ops;
d31907f3 46 st->trig->private_data = indio_dev;
f7fe1d1d
BS
47 ret = iio_trigger_register(st->trig);
48
49 /* select default trigger */
50 indio_dev->trig = st->trig;
51 if (ret)
05c2858d 52 goto error_free_irq;
f7fe1d1d
BS
53
54 return 0;
55
80782446
JC
56error_free_irq:
57 free_irq(st->us->irq, st->trig);
f7fe1d1d
BS
58error_free_trig:
59 iio_free_trigger(st->trig);
80782446 60error_ret:
f7fe1d1d
BS
61 return ret;
62}
63
64void adis16201_remove_trigger(struct iio_dev *indio_dev)
65{
d31907f3 66 struct adis16201_state *state = iio_priv(indio_dev);
f7fe1d1d
BS
67
68 iio_trigger_unregister(state->trig);
80782446 69 free_irq(state->us->irq, state->trig);
f7fe1d1d
BS
70 iio_free_trigger(state->trig);
71}
This page took 0.28018 seconds and 5 git commands to generate.