2 * Common library for ADIS16XXX devices
4 * Copyright 2012 Analog Devices Inc.
5 * Author: Lars-Peter Clausen <lars@metafoo.de>
7 * Licensed under the GPL-2 or later.
10 #include <linux/interrupt.h>
11 #include <linux/kernel.h>
12 #include <linux/spi/spi.h>
13 #include <linux/export.h>
15 #include <linux/iio/iio.h>
16 #include <linux/iio/trigger.h>
17 #include <linux/iio/imu/adis.h>
19 static int adis_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
22 struct adis
*adis
= iio_trigger_get_drvdata(trig
);
24 return adis_enable_irq(adis
, state
);
27 static const struct iio_trigger_ops adis_trigger_ops
= {
29 .set_trigger_state
= &adis_data_rdy_trigger_set_state
,
33 * adis_probe_trigger() - Sets up trigger for a adis device
34 * @adis: The adis device
35 * @indio_dev: The IIO device
37 * Returns 0 on success or a negative error code
39 * adis_remove_trigger() should be used to free the trigger.
41 int adis_probe_trigger(struct adis
*adis
, struct iio_dev
*indio_dev
)
45 adis
->trig
= iio_trigger_alloc("%s-dev%d", indio_dev
->name
,
47 if (adis
->trig
== NULL
)
50 ret
= request_irq(adis
->spi
->irq
,
51 &iio_trigger_generic_data_rdy_poll
,
58 adis
->trig
->dev
.parent
= &adis
->spi
->dev
;
59 adis
->trig
->ops
= &adis_trigger_ops
;
60 iio_trigger_set_drvdata(adis
->trig
, adis
);
61 ret
= iio_trigger_register(adis
->trig
);
63 indio_dev
->trig
= adis
->trig
;
70 free_irq(adis
->spi
->irq
, adis
->trig
);
72 iio_trigger_free(adis
->trig
);
75 EXPORT_SYMBOL_GPL(adis_probe_trigger
);
78 * adis_remove_trigger() - Remove trigger for a adis devices
79 * @adis: The adis device
81 * Removes the trigger previously registered with adis_probe_trigger().
83 void adis_remove_trigger(struct adis
*adis
)
85 iio_trigger_unregister(adis
->trig
);
86 free_irq(adis
->spi
->irq
, adis
->trig
);
87 iio_trigger_free(adis
->trig
);
89 EXPORT_SYMBOL_GPL(adis_remove_trigger
);