0001
0002
0003
0004
0005
0006 #include <linux/irq.h>
0007 #include <linux/module.h>
0008 #include <linux/atomic.h>
0009
0010 #ifndef _IIO_TRIGGER_H_
0011 #define _IIO_TRIGGER_H_
0012
0013 #ifdef CONFIG_IIO_TRIGGER
0014 struct iio_subirq {
0015 bool enabled;
0016 };
0017
0018 struct iio_dev;
0019 struct iio_trigger;
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 struct iio_trigger_ops {
0033 int (*set_trigger_state)(struct iio_trigger *trig, bool state);
0034 void (*reenable)(struct iio_trigger *trig);
0035 int (*validate_device)(struct iio_trigger *trig,
0036 struct iio_dev *indio_dev);
0037 };
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060 struct iio_trigger {
0061 const struct iio_trigger_ops *ops;
0062 struct module *owner;
0063 int id;
0064 const char *name;
0065 struct device dev;
0066
0067 struct list_head list;
0068 struct list_head alloc_list;
0069 atomic_t use_count;
0070
0071 struct irq_chip subirq_chip;
0072 int subirq_base;
0073
0074 struct iio_subirq subirqs[CONFIG_IIO_CONSUMERS_PER_TRIGGER];
0075 unsigned long pool[BITS_TO_LONGS(CONFIG_IIO_CONSUMERS_PER_TRIGGER)];
0076 struct mutex pool_lock;
0077 bool attached_own_device;
0078 struct work_struct reenable_work;
0079 };
0080
0081
0082 static inline struct iio_trigger *to_iio_trigger(struct device *d)
0083 {
0084 return container_of(d, struct iio_trigger, dev);
0085 }
0086
0087 static inline void iio_trigger_put(struct iio_trigger *trig)
0088 {
0089 module_put(trig->owner);
0090 put_device(&trig->dev);
0091 }
0092
0093 static inline struct iio_trigger *iio_trigger_get(struct iio_trigger *trig)
0094 {
0095 get_device(&trig->dev);
0096
0097 WARN_ONCE(list_empty(&trig->list),
0098 "Getting non-registered iio trigger %s is prohibited\n",
0099 trig->name);
0100
0101 __module_get(trig->owner);
0102
0103 return trig;
0104 }
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114 static inline void iio_trigger_set_drvdata(struct iio_trigger *trig, void *data)
0115 {
0116 dev_set_drvdata(&trig->dev, data);
0117 }
0118
0119
0120
0121
0122
0123
0124
0125 static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
0126 {
0127 return dev_get_drvdata(&trig->dev);
0128 }
0129
0130
0131
0132
0133
0134 int iio_trigger_register(struct iio_trigger *trig_info);
0135
0136 int devm_iio_trigger_register(struct device *dev,
0137 struct iio_trigger *trig_info);
0138
0139
0140
0141
0142
0143 void iio_trigger_unregister(struct iio_trigger *trig_info);
0144
0145
0146
0147
0148
0149
0150
0151
0152 int iio_trigger_set_immutable(struct iio_dev *indio_dev, struct iio_trigger *trig);
0153
0154
0155
0156
0157
0158
0159
0160 void iio_trigger_poll(struct iio_trigger *trig);
0161 void iio_trigger_poll_chained(struct iio_trigger *trig);
0162
0163 irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
0164
0165 #define iio_trigger_alloc(parent, fmt, ...) \
0166 __iio_trigger_alloc((parent), THIS_MODULE, (fmt), ##__VA_ARGS__)
0167
0168 __printf(3, 4)
0169 struct iio_trigger *__iio_trigger_alloc(struct device *parent,
0170 struct module *this_mod,
0171 const char *fmt, ...);
0172 void iio_trigger_free(struct iio_trigger *trig);
0173
0174
0175
0176
0177
0178 bool iio_trigger_using_own(struct iio_dev *indio_dev);
0179
0180 int iio_trigger_validate_own_device(struct iio_trigger *trig,
0181 struct iio_dev *indio_dev);
0182
0183 #else
0184 struct iio_trigger;
0185 struct iio_trigger_ops;
0186 #endif
0187 #endif