1
2
3
4
5
6
7
8
9
10#ifndef _INDUSTRIAL_IO_H_
11#define _INDUSTRIAL_IO_H_
12
13#include <linux/device.h>
14#include <linux/cdev.h>
15#include <linux/iio/types.h>
16#include <linux/of.h>
17
18
19
20
21
22
23enum iio_chan_info_enum {
24 IIO_CHAN_INFO_RAW = 0,
25 IIO_CHAN_INFO_PROCESSED,
26 IIO_CHAN_INFO_SCALE,
27 IIO_CHAN_INFO_OFFSET,
28 IIO_CHAN_INFO_CALIBSCALE,
29 IIO_CHAN_INFO_CALIBBIAS,
30 IIO_CHAN_INFO_PEAK,
31 IIO_CHAN_INFO_PEAK_SCALE,
32 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW,
33 IIO_CHAN_INFO_AVERAGE_RAW,
34 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY,
35 IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY,
36 IIO_CHAN_INFO_SAMP_FREQ,
37 IIO_CHAN_INFO_FREQUENCY,
38 IIO_CHAN_INFO_PHASE,
39 IIO_CHAN_INFO_HARDWAREGAIN,
40 IIO_CHAN_INFO_HYSTERESIS,
41 IIO_CHAN_INFO_INT_TIME,
42 IIO_CHAN_INFO_ENABLE,
43 IIO_CHAN_INFO_CALIBHEIGHT,
44 IIO_CHAN_INFO_CALIBWEIGHT,
45 IIO_CHAN_INFO_DEBOUNCE_COUNT,
46 IIO_CHAN_INFO_DEBOUNCE_TIME,
47 IIO_CHAN_INFO_CALIBEMISSIVITY,
48 IIO_CHAN_INFO_OVERSAMPLING_RATIO,
49};
50
51enum iio_shared_by {
52 IIO_SEPARATE,
53 IIO_SHARED_BY_TYPE,
54 IIO_SHARED_BY_DIR,
55 IIO_SHARED_BY_ALL
56};
57
58enum iio_endian {
59 IIO_CPU,
60 IIO_BE,
61 IIO_LE,
62};
63
64struct iio_chan_spec;
65struct iio_dev;
66
67
68
69
70
71
72
73
74
75struct iio_chan_spec_ext_info {
76 const char *name;
77 enum iio_shared_by shared;
78 ssize_t (*read)(struct iio_dev *, uintptr_t private,
79 struct iio_chan_spec const *, char *buf);
80 ssize_t (*write)(struct iio_dev *, uintptr_t private,
81 struct iio_chan_spec const *, const char *buf,
82 size_t len);
83 uintptr_t private;
84};
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102struct iio_enum {
103 const char * const *items;
104 unsigned int num_items;
105 int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int);
106 int (*get)(struct iio_dev *, const struct iio_chan_spec *);
107};
108
109ssize_t iio_enum_available_read(struct iio_dev *indio_dev,
110 uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
111ssize_t iio_enum_read(struct iio_dev *indio_dev,
112 uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
113ssize_t iio_enum_write(struct iio_dev *indio_dev,
114 uintptr_t priv, const struct iio_chan_spec *chan, const char *buf,
115 size_t len);
116
117
118
119
120
121
122
123
124
125#define IIO_ENUM(_name, _shared, _e) \
126{ \
127 .name = (_name), \
128 .shared = (_shared), \
129 .read = iio_enum_read, \
130 .write = iio_enum_write, \
131 .private = (uintptr_t)(_e), \
132}
133
134
135
136
137
138
139
140
141
142#define IIO_ENUM_AVAILABLE(_name, _e) \
143{ \
144 .name = (_name "_available"), \
145 .shared = IIO_SHARED_BY_TYPE, \
146 .read = iio_enum_available_read, \
147 .private = (uintptr_t)(_e), \
148}
149
150
151
152
153
154
155struct iio_mount_matrix {
156 const char *rotation[9];
157};
158
159ssize_t iio_show_mount_matrix(struct iio_dev *indio_dev, uintptr_t priv,
160 const struct iio_chan_spec *chan, char *buf);
161int of_iio_read_mount_matrix(const struct device *dev, const char *propname,
162 struct iio_mount_matrix *matrix);
163
164typedef const struct iio_mount_matrix *
165 (iio_get_mount_matrix_t)(const struct iio_dev *indio_dev,
166 const struct iio_chan_spec *chan);
167
168
169
170
171
172
173#define IIO_MOUNT_MATRIX(_shared, _get) \
174{ \
175 .name = "mount_matrix", \
176 .shared = (_shared), \
177 .read = iio_show_mount_matrix, \
178 .private = (uintptr_t)(_get), \
179}
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195struct iio_event_spec {
196 enum iio_event_type type;
197 enum iio_event_direction dir;
198 unsigned long mask_separate;
199 unsigned long mask_shared_by_type;
200 unsigned long mask_shared_by_dir;
201 unsigned long mask_shared_by_all;
202};
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257struct iio_chan_spec {
258 enum iio_chan_type type;
259 int channel;
260 int channel2;
261 unsigned long address;
262 int scan_index;
263 struct {
264 char sign;
265 u8 realbits;
266 u8 storagebits;
267 u8 shift;
268 u8 repeat;
269 enum iio_endian endianness;
270 } scan_type;
271 long info_mask_separate;
272 long info_mask_shared_by_type;
273 long info_mask_shared_by_dir;
274 long info_mask_shared_by_all;
275 const struct iio_event_spec *event_spec;
276 unsigned int num_event_specs;
277 const struct iio_chan_spec_ext_info *ext_info;
278 const char *extend_name;
279 const char *datasheet_name;
280 unsigned modified:1;
281 unsigned indexed:1;
282 unsigned output:1;
283 unsigned differential:1;
284};
285
286
287
288
289
290
291
292
293
294
295static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
296 enum iio_chan_info_enum type)
297{
298 return (chan->info_mask_separate & BIT(type)) |
299 (chan->info_mask_shared_by_type & BIT(type)) |
300 (chan->info_mask_shared_by_dir & BIT(type)) |
301 (chan->info_mask_shared_by_all & BIT(type));
302}
303
304#define IIO_CHAN_SOFT_TIMESTAMP(_si) { \
305 .type = IIO_TIMESTAMP, \
306 .channel = -1, \
307 .scan_index = _si, \
308 .scan_type = { \
309 .sign = 's', \
310 .realbits = 64, \
311 .storagebits = 64, \
312 }, \
313}
314
315s64 iio_get_time_ns(const struct iio_dev *indio_dev);
316unsigned int iio_get_time_res(const struct iio_dev *indio_dev);
317
318
319#define INDIO_DIRECT_MODE 0x01
320#define INDIO_BUFFER_TRIGGERED 0x02
321#define INDIO_BUFFER_SOFTWARE 0x04
322#define INDIO_BUFFER_HARDWARE 0x08
323#define INDIO_EVENT_TRIGGERED 0x10
324
325#define INDIO_ALL_BUFFER_MODES \
326 (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE | INDIO_BUFFER_SOFTWARE)
327
328#define INDIO_MAX_RAW_ELEMENTS 4
329
330struct iio_trigger;
331struct iio_dev;
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382struct iio_info {
383 struct module *driver_module;
384 struct attribute_group *event_attrs;
385 const struct attribute_group *attrs;
386
387 int (*read_raw)(struct iio_dev *indio_dev,
388 struct iio_chan_spec const *chan,
389 int *val,
390 int *val2,
391 long mask);
392
393 int (*read_raw_multi)(struct iio_dev *indio_dev,
394 struct iio_chan_spec const *chan,
395 int max_len,
396 int *vals,
397 int *val_len,
398 long mask);
399
400 int (*write_raw)(struct iio_dev *indio_dev,
401 struct iio_chan_spec const *chan,
402 int val,
403 int val2,
404 long mask);
405
406 int (*write_raw_get_fmt)(struct iio_dev *indio_dev,
407 struct iio_chan_spec const *chan,
408 long mask);
409
410 int (*read_event_config)(struct iio_dev *indio_dev,
411 const struct iio_chan_spec *chan,
412 enum iio_event_type type,
413 enum iio_event_direction dir);
414
415 int (*write_event_config)(struct iio_dev *indio_dev,
416 const struct iio_chan_spec *chan,
417 enum iio_event_type type,
418 enum iio_event_direction dir,
419 int state);
420
421 int (*read_event_value)(struct iio_dev *indio_dev,
422 const struct iio_chan_spec *chan,
423 enum iio_event_type type,
424 enum iio_event_direction dir,
425 enum iio_event_info info, int *val, int *val2);
426
427 int (*write_event_value)(struct iio_dev *indio_dev,
428 const struct iio_chan_spec *chan,
429 enum iio_event_type type,
430 enum iio_event_direction dir,
431 enum iio_event_info info, int val, int val2);
432
433 int (*validate_trigger)(struct iio_dev *indio_dev,
434 struct iio_trigger *trig);
435 int (*update_scan_mode)(struct iio_dev *indio_dev,
436 const unsigned long *scan_mask);
437 int (*debugfs_reg_access)(struct iio_dev *indio_dev,
438 unsigned reg, unsigned writeval,
439 unsigned *readval);
440 int (*of_xlate)(struct iio_dev *indio_dev,
441 const struct of_phandle_args *iiospec);
442 int (*hwfifo_set_watermark)(struct iio_dev *indio_dev, unsigned val);
443 int (*hwfifo_flush_to_buffer)(struct iio_dev *indio_dev,
444 unsigned count);
445};
446
447
448
449
450
451
452
453
454
455
456
457struct iio_buffer_setup_ops {
458 int (*preenable)(struct iio_dev *);
459 int (*postenable)(struct iio_dev *);
460 int (*predisable)(struct iio_dev *);
461 int (*postdisable)(struct iio_dev *);
462 bool (*validate_scan_mask)(struct iio_dev *indio_dev,
463 const unsigned long *scan_mask);
464};
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506struct iio_dev {
507 int id;
508
509 int modes;
510 int currentmode;
511 struct device dev;
512
513 struct iio_event_interface *event_interface;
514
515 struct iio_buffer *buffer;
516 struct list_head buffer_list;
517 int scan_bytes;
518 struct mutex mlock;
519
520 const unsigned long *available_scan_masks;
521 unsigned masklength;
522 const unsigned long *active_scan_mask;
523 bool scan_timestamp;
524 unsigned scan_index_timestamp;
525 struct iio_trigger *trig;
526 struct iio_poll_func *pollfunc;
527 struct iio_poll_func *pollfunc_event;
528
529 struct iio_chan_spec const *channels;
530 int num_channels;
531
532 struct list_head channel_attr_list;
533 struct attribute_group chan_attr_group;
534 const char *name;
535 const struct iio_info *info;
536 clockid_t clock_id;
537 struct mutex info_exist_lock;
538 const struct iio_buffer_setup_ops *setup_ops;
539 struct cdev chrdev;
540#define IIO_MAX_GROUPS 6
541 const struct attribute_group *groups[IIO_MAX_GROUPS + 1];
542 int groupcounter;
543
544 unsigned long flags;
545#if defined(CONFIG_DEBUG_FS)
546 struct dentry *debugfs_dentry;
547 unsigned cached_reg_addr;
548#endif
549};
550
551const struct iio_chan_spec
552*iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
553int iio_device_register(struct iio_dev *indio_dev);
554void iio_device_unregister(struct iio_dev *indio_dev);
555int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev);
556void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev);
557int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
558int iio_device_claim_direct_mode(struct iio_dev *indio_dev);
559void iio_device_release_direct_mode(struct iio_dev *indio_dev);
560
561extern struct bus_type iio_bus_type;
562
563
564
565
566
567static inline void iio_device_put(struct iio_dev *indio_dev)
568{
569 if (indio_dev)
570 put_device(&indio_dev->dev);
571}
572
573
574
575
576
577static inline clockid_t iio_device_get_clock(const struct iio_dev *indio_dev)
578{
579 return indio_dev->clock_id;
580}
581
582
583
584
585
586
587
588static inline struct iio_dev *dev_to_iio_dev(struct device *dev)
589{
590 return container_of(dev, struct iio_dev, dev);
591}
592
593
594
595
596
597
598
599static inline struct iio_dev *iio_device_get(struct iio_dev *indio_dev)
600{
601 return indio_dev ? dev_to_iio_dev(get_device(&indio_dev->dev)) : NULL;
602}
603
604
605
606
607
608
609
610
611
612
613static inline void iio_device_set_drvdata(struct iio_dev *indio_dev, void *data)
614{
615 dev_set_drvdata(&indio_dev->dev, data);
616}
617
618
619
620
621
622
623
624static inline void *iio_device_get_drvdata(struct iio_dev *indio_dev)
625{
626 return dev_get_drvdata(&indio_dev->dev);
627}
628
629
630#define IIO_ALIGN L1_CACHE_BYTES
631struct iio_dev *iio_device_alloc(int sizeof_priv);
632
633static inline void *iio_priv(const struct iio_dev *indio_dev)
634{
635 return (char *)indio_dev + ALIGN(sizeof(struct iio_dev), IIO_ALIGN);
636}
637
638static inline struct iio_dev *iio_priv_to_dev(void *priv)
639{
640 return (struct iio_dev *)((char *)priv -
641 ALIGN(sizeof(struct iio_dev), IIO_ALIGN));
642}
643
644void iio_device_free(struct iio_dev *indio_dev);
645struct iio_dev *devm_iio_device_alloc(struct device *dev, int sizeof_priv);
646void devm_iio_device_free(struct device *dev, struct iio_dev *indio_dev);
647struct iio_trigger *devm_iio_trigger_alloc(struct device *dev,
648 const char *fmt, ...);
649void devm_iio_trigger_free(struct device *dev, struct iio_trigger *iio_trig);
650
651
652
653
654
655static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
656{
657 return indio_dev->currentmode
658 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE |
659 INDIO_BUFFER_SOFTWARE);
660}
661
662
663
664
665
666#if defined(CONFIG_DEBUG_FS)
667static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
668{
669 return indio_dev->debugfs_dentry;
670}
671#else
672static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
673{
674 return NULL;
675}
676#endif
677
678ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals);
679
680int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
681 int *fract);
682
683
684
685
686
687
688
689#define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL)
690
691
692
693
694
695
696
697#define IIO_RAD_TO_DEGREE(rad) \
698 (((rad) * 18000000ULL + 314159ULL / 2) / 314159ULL)
699
700
701
702
703
704
705
706#define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL)
707
708
709
710
711
712
713
714#define IIO_M_S_2_TO_G(ms2) (((ms2) * 100000ULL + 980665ULL / 2) / 980665ULL)
715
716#endif
717