1
2
3
4
5
6
7
8
9#include <linux/irq.h>
10#include <linux/module.h>
11#include <linux/atomic.h>
12
13#ifndef _IIO_TRIGGER_H_
14#define _IIO_TRIGGER_H_
15
16#ifdef CONFIG_IIO_TRIGGER
17struct iio_subirq {
18 bool enabled;
19};
20
21
22
23
24
25
26
27
28
29
30
31
32
33struct iio_trigger_ops {
34 struct module *owner;
35 int (*set_trigger_state)(struct iio_trigger *trig, bool state);
36 int (*try_reenable)(struct iio_trigger *trig);
37 int (*validate_device)(struct iio_trigger *trig,
38 struct iio_dev *indio_dev);
39};
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57struct iio_trigger {
58 const struct iio_trigger_ops *ops;
59 int id;
60 const char *name;
61 struct device dev;
62
63 struct list_head list;
64 struct list_head alloc_list;
65 atomic_t use_count;
66
67 struct irq_chip subirq_chip;
68 int subirq_base;
69
70 struct iio_subirq subirqs[CONFIG_IIO_CONSUMERS_PER_TRIGGER];
71 unsigned long pool[BITS_TO_LONGS(CONFIG_IIO_CONSUMERS_PER_TRIGGER)];
72 struct mutex pool_lock;
73};
74
75
76static inline struct iio_trigger *to_iio_trigger(struct device *d)
77{
78 return container_of(d, struct iio_trigger, dev);
79}
80
81static inline void iio_trigger_put(struct iio_trigger *trig)
82{
83 module_put(trig->ops->owner);
84 put_device(&trig->dev);
85}
86
87static inline void iio_trigger_get(struct iio_trigger *trig)
88{
89 get_device(&trig->dev);
90 __module_get(trig->ops->owner);
91}
92
93
94
95
96
97
98
99
100
101static inline void iio_trigger_set_drvdata(struct iio_trigger *trig, void *data)
102{
103 dev_set_drvdata(&trig->dev, data);
104}
105
106
107
108
109
110
111
112static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
113{
114 return dev_get_drvdata(&trig->dev);
115}
116
117
118
119
120
121int iio_trigger_register(struct iio_trigger *trig_info);
122
123
124
125
126
127void iio_trigger_unregister(struct iio_trigger *trig_info);
128
129
130
131
132
133
134
135
136void iio_trigger_poll(struct iio_trigger *trig, s64 time);
137void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time);
138
139irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
140
141__printf(1, 2) struct iio_trigger *iio_trigger_alloc(const char *fmt, ...);
142void iio_trigger_free(struct iio_trigger *trig);
143
144#else
145struct iio_trigger;
146struct iio_trigger_ops;
147#endif
148#endif
149