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
= {
28 .set_trigger_state
= &adis_data_rdy_trigger_set_state
,
32 * adis_probe_trigger() - Sets up trigger for a adis device
33 * @adis: The adis device
34 * @indio_dev: The IIO device
36 * Returns 0 on success or a negative error code
38 * adis_remove_trigger() should be used to free the trigger.
40 int adis_probe_trigger(struct adis
*adis
, struct iio_dev
*indio_dev
)
44 adis
->trig
= iio_trigger_alloc("%s-dev%d", indio_dev
->name
,
46 if (adis
->trig
== NULL
)
49 adis
->trig
->dev
.parent
= &adis
->spi
->dev
;
50 adis
->trig
->ops
= &adis_trigger_ops
;
51 iio_trigger_set_drvdata(adis
->trig
, adis
);
53 ret
= request_irq(adis
->spi
->irq
,
54 &iio_trigger_generic_data_rdy_poll
,
61 ret
= iio_trigger_register(adis
->trig
);
63 indio_dev
->trig
= iio_trigger_get(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
);