diff options
Diffstat (limited to 'include/linux/iio/iio.h')
-rw-r--r-- | include/linux/iio/iio.h | 93 |
1 files changed, 82 insertions, 11 deletions
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 2103cc32a5fb..256a90a1bea6 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h | |||
@@ -36,6 +36,14 @@ enum iio_chan_info_enum { | |||
36 | IIO_CHAN_INFO_PHASE, | 36 | IIO_CHAN_INFO_PHASE, |
37 | IIO_CHAN_INFO_HARDWAREGAIN, | 37 | IIO_CHAN_INFO_HARDWAREGAIN, |
38 | IIO_CHAN_INFO_HYSTERESIS, | 38 | IIO_CHAN_INFO_HYSTERESIS, |
39 | IIO_CHAN_INFO_INT_TIME, | ||
40 | }; | ||
41 | |||
42 | enum iio_shared_by { | ||
43 | IIO_SEPARATE, | ||
44 | IIO_SHARED_BY_TYPE, | ||
45 | IIO_SHARED_BY_DIR, | ||
46 | IIO_SHARED_BY_ALL | ||
39 | }; | 47 | }; |
40 | 48 | ||
41 | enum iio_endian { | 49 | enum iio_endian { |
@@ -57,7 +65,7 @@ struct iio_dev; | |||
57 | */ | 65 | */ |
58 | struct iio_chan_spec_ext_info { | 66 | struct iio_chan_spec_ext_info { |
59 | const char *name; | 67 | const char *name; |
60 | bool shared; | 68 | enum iio_shared_by shared; |
61 | ssize_t (*read)(struct iio_dev *, uintptr_t private, | 69 | ssize_t (*read)(struct iio_dev *, uintptr_t private, |
62 | struct iio_chan_spec const *, char *buf); | 70 | struct iio_chan_spec const *, char *buf); |
63 | ssize_t (*write)(struct iio_dev *, uintptr_t private, | 71 | ssize_t (*write)(struct iio_dev *, uintptr_t private, |
@@ -125,12 +133,35 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev, | |||
125 | #define IIO_ENUM_AVAILABLE(_name, _e) \ | 133 | #define IIO_ENUM_AVAILABLE(_name, _e) \ |
126 | { \ | 134 | { \ |
127 | .name = (_name "_available"), \ | 135 | .name = (_name "_available"), \ |
128 | .shared = true, \ | 136 | .shared = IIO_SHARED_BY_TYPE, \ |
129 | .read = iio_enum_available_read, \ | 137 | .read = iio_enum_available_read, \ |
130 | .private = (uintptr_t)(_e), \ | 138 | .private = (uintptr_t)(_e), \ |
131 | } | 139 | } |
132 | 140 | ||
133 | /** | 141 | /** |
142 | * struct iio_event_spec - specification for a channel event | ||
143 | * @type: Type of the event | ||
144 | * @dir: Direction of the event | ||
145 | * @mask_separate: Bit mask of enum iio_event_info values. Attributes | ||
146 | * set in this mask will be registered per channel. | ||
147 | * @mask_shared_by_type: Bit mask of enum iio_event_info values. Attributes | ||
148 | * set in this mask will be shared by channel type. | ||
149 | * @mask_shared_by_dir: Bit mask of enum iio_event_info values. Attributes | ||
150 | * set in this mask will be shared by channel type and | ||
151 | * direction. | ||
152 | * @mask_shared_by_all: Bit mask of enum iio_event_info values. Attributes | ||
153 | * set in this mask will be shared by all channels. | ||
154 | */ | ||
155 | struct iio_event_spec { | ||
156 | enum iio_event_type type; | ||
157 | enum iio_event_direction dir; | ||
158 | unsigned long mask_separate; | ||
159 | unsigned long mask_shared_by_type; | ||
160 | unsigned long mask_shared_by_dir; | ||
161 | unsigned long mask_shared_by_all; | ||
162 | }; | ||
163 | |||
164 | /** | ||
134 | * struct iio_chan_spec - specification of a single channel | 165 | * struct iio_chan_spec - specification of a single channel |
135 | * @type: What type of measurement is the channel making. | 166 | * @type: What type of measurement is the channel making. |
136 | * @channel: What number do we wish to assign the channel. | 167 | * @channel: What number do we wish to assign the channel. |
@@ -146,13 +177,18 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev, | |||
146 | * shift: Shift right by this before masking out | 177 | * shift: Shift right by this before masking out |
147 | * realbits. | 178 | * realbits. |
148 | * endianness: little or big endian | 179 | * endianness: little or big endian |
149 | * @info_mask: What information is to be exported about this channel. | ||
150 | * This includes calibbias, scale etc. | ||
151 | * @info_mask_separate: What information is to be exported that is specific to | 180 | * @info_mask_separate: What information is to be exported that is specific to |
152 | * this channel. | 181 | * this channel. |
153 | * @info_mask_shared_by_type: What information is to be exported that is shared | 182 | * @info_mask_shared_by_type: What information is to be exported that is shared |
154 | * by all channels of the same type. | 183 | * by all channels of the same type. |
184 | * @info_mask_shared_by_dir: What information is to be exported that is shared | ||
185 | * by all channels of the same direction. | ||
186 | * @info_mask_shared_by_all: What information is to be exported that is shared | ||
187 | * by all channels. | ||
155 | * @event_mask: What events can this channel produce. | 188 | * @event_mask: What events can this channel produce. |
189 | * @event_spec: Array of events which should be registered for this | ||
190 | * channel. | ||
191 | * @num_event_specs: Size of the event_spec array. | ||
156 | * @ext_info: Array of extended info attributes for this channel. | 192 | * @ext_info: Array of extended info attributes for this channel. |
157 | * The array is NULL terminated, the last element should | 193 | * The array is NULL terminated, the last element should |
158 | * have its name field set to NULL. | 194 | * have its name field set to NULL. |
@@ -186,10 +222,13 @@ struct iio_chan_spec { | |||
186 | u8 shift; | 222 | u8 shift; |
187 | enum iio_endian endianness; | 223 | enum iio_endian endianness; |
188 | } scan_type; | 224 | } scan_type; |
189 | long info_mask; | ||
190 | long info_mask_separate; | 225 | long info_mask_separate; |
191 | long info_mask_shared_by_type; | 226 | long info_mask_shared_by_type; |
227 | long info_mask_shared_by_dir; | ||
228 | long info_mask_shared_by_all; | ||
192 | long event_mask; | 229 | long event_mask; |
230 | const struct iio_event_spec *event_spec; | ||
231 | unsigned int num_event_specs; | ||
193 | const struct iio_chan_spec_ext_info *ext_info; | 232 | const struct iio_chan_spec_ext_info *ext_info; |
194 | const char *extend_name; | 233 | const char *extend_name; |
195 | const char *datasheet_name; | 234 | const char *datasheet_name; |
@@ -212,7 +251,9 @@ static inline bool iio_channel_has_info(const struct iio_chan_spec *chan, | |||
212 | enum iio_chan_info_enum type) | 251 | enum iio_chan_info_enum type) |
213 | { | 252 | { |
214 | return (chan->info_mask_separate & BIT(type)) | | 253 | return (chan->info_mask_separate & BIT(type)) | |
215 | (chan->info_mask_shared_by_type & BIT(type)); | 254 | (chan->info_mask_shared_by_type & BIT(type)) | |
255 | (chan->info_mask_shared_by_dir & BIT(type)) | | ||
256 | (chan->info_mask_shared_by_all & BIT(type)); | ||
216 | } | 257 | } |
217 | 258 | ||
218 | #define IIO_ST(si, rb, sb, sh) \ | 259 | #define IIO_ST(si, rb, sb, sh) \ |
@@ -270,6 +311,12 @@ struct iio_dev; | |||
270 | * is event dependant. event_code specifies which event. | 311 | * is event dependant. event_code specifies which event. |
271 | * @write_event_value: write the value associated with the event. | 312 | * @write_event_value: write the value associated with the event. |
272 | * Meaning is event dependent. | 313 | * Meaning is event dependent. |
314 | * @read_event_config_new: find out if the event is enabled. New style interface. | ||
315 | * @write_event_config_new: set if the event is enabled. New style interface. | ||
316 | * @read_event_value_new: read a configuration value associated with the event. | ||
317 | * New style interface. | ||
318 | * @write_event_value_new: write a configuration value for the event. New style | ||
319 | * interface. | ||
273 | * @validate_trigger: function to validate the trigger when the | 320 | * @validate_trigger: function to validate the trigger when the |
274 | * current trigger gets changed. | 321 | * current trigger gets changed. |
275 | * @update_scan_mode: function to configure device and scan buffer when | 322 | * @update_scan_mode: function to configure device and scan buffer when |
@@ -310,6 +357,30 @@ struct iio_info { | |||
310 | int (*write_event_value)(struct iio_dev *indio_dev, | 357 | int (*write_event_value)(struct iio_dev *indio_dev, |
311 | u64 event_code, | 358 | u64 event_code, |
312 | int val); | 359 | int val); |
360 | |||
361 | int (*read_event_config_new)(struct iio_dev *indio_dev, | ||
362 | const struct iio_chan_spec *chan, | ||
363 | enum iio_event_type type, | ||
364 | enum iio_event_direction dir); | ||
365 | |||
366 | int (*write_event_config_new)(struct iio_dev *indio_dev, | ||
367 | const struct iio_chan_spec *chan, | ||
368 | enum iio_event_type type, | ||
369 | enum iio_event_direction dir, | ||
370 | int state); | ||
371 | |||
372 | int (*read_event_value_new)(struct iio_dev *indio_dev, | ||
373 | const struct iio_chan_spec *chan, | ||
374 | enum iio_event_type type, | ||
375 | enum iio_event_direction dir, | ||
376 | enum iio_event_info info, int *val, int *val2); | ||
377 | |||
378 | int (*write_event_value_new)(struct iio_dev *indio_dev, | ||
379 | const struct iio_chan_spec *chan, | ||
380 | enum iio_event_type type, | ||
381 | enum iio_event_direction dir, | ||
382 | enum iio_event_info info, int val, int val2); | ||
383 | |||
313 | int (*validate_trigger)(struct iio_dev *indio_dev, | 384 | int (*validate_trigger)(struct iio_dev *indio_dev, |
314 | struct iio_trigger *trig); | 385 | struct iio_trigger *trig); |
315 | int (*update_scan_mode)(struct iio_dev *indio_dev, | 386 | int (*update_scan_mode)(struct iio_dev *indio_dev, |
@@ -457,7 +528,7 @@ static inline void iio_device_put(struct iio_dev *indio_dev) | |||
457 | { | 528 | { |
458 | if (indio_dev) | 529 | if (indio_dev) |
459 | put_device(&indio_dev->dev); | 530 | put_device(&indio_dev->dev); |
460 | }; | 531 | } |
461 | 532 | ||
462 | /** | 533 | /** |
463 | * dev_to_iio_dev() - Get IIO device struct from a device struct | 534 | * dev_to_iio_dev() - Get IIO device struct from a device struct |
@@ -593,7 +664,7 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev) | |||
593 | { | 664 | { |
594 | return indio_dev->currentmode | 665 | return indio_dev->currentmode |
595 | & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE); | 666 | & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE); |
596 | }; | 667 | } |
597 | 668 | ||
598 | /** | 669 | /** |
599 | * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry | 670 | * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry |
@@ -603,12 +674,12 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev) | |||
603 | static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) | 674 | static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) |
604 | { | 675 | { |
605 | return indio_dev->debugfs_dentry; | 676 | return indio_dev->debugfs_dentry; |
606 | }; | 677 | } |
607 | #else | 678 | #else |
608 | static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) | 679 | static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) |
609 | { | 680 | { |
610 | return NULL; | 681 | return NULL; |
611 | }; | 682 | } |
612 | #endif | 683 | #endif |
613 | 684 | ||
614 | int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, | 685 | int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, |