Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
iio.h
Go to the documentation of this file.
1 
2 /* The industrial I/O core
3  *
4  * Copyright (c) 2008 Jonathan Cameron
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 as published by
8  * the Free Software Foundation.
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 /* IIO TODO LIST */
17 /*
18  * Provide means of adjusting timer accuracy.
19  * Currently assumes nano seconds.
20  */
21 
39 };
40 
41 #define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
42 #define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
43 #define IIO_CHAN_INFO_BITS(type) (IIO_CHAN_INFO_SHARED_BIT(type) | \
44  IIO_CHAN_INFO_SEPARATE_BIT(type))
45 
46 #define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
47  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
48 #define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
49  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
50 #define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
51  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
52 #define IIO_CHAN_INFO_SCALE_SHARED_BIT \
53  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
54 #define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
55  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
56 #define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
57  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
58 #define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
59  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
60 #define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
61  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
62 #define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
63  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
64 #define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
65  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
66 #define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
67  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
68 #define IIO_CHAN_INFO_PEAK_SHARED_BIT \
69  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
70 #define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
71  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
72 #define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
73  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
74 #define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
75  IIO_CHAN_INFO_SEPARATE_BIT( \
76  IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
77 #define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
78  IIO_CHAN_INFO_SHARED_BIT( \
79  IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
80 #define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
81  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
82 #define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
83  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
84 #define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
85  IIO_CHAN_INFO_SHARED_BIT( \
86  IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
87 #define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
88  IIO_CHAN_INFO_SEPARATE_BIT( \
89  IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
90 #define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
91  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
92 #define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
93  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
94 #define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
95  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
96 #define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
97  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
98 #define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
99  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
100 #define IIO_CHAN_INFO_PHASE_SHARED_BIT \
101  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
102 #define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
103  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
104 #define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
105  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
106 #define IIO_CHAN_INFO_HYSTERESIS_SEPARATE_BIT \
107  IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HYSTERESIS)
108 #define IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT \
109  IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HYSTERESIS)
110 
115 };
116 
117 struct iio_chan_spec;
118 struct iio_dev;
119 
129  const char *name;
130  bool shared;
131  ssize_t (*read)(struct iio_dev *, uintptr_t private,
132  struct iio_chan_spec const *, char *buf);
133  ssize_t (*write)(struct iio_dev *, uintptr_t private,
134  struct iio_chan_spec const *, const char *buf,
135  size_t len);
136  uintptr_t private;
137 };
138 
155 struct iio_enum {
156  const char * const *items;
157  unsigned int num_items;
158  int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int);
159  int (*get)(struct iio_dev *, const struct iio_chan_spec *);
160 };
161 
162 ssize_t iio_enum_available_read(struct iio_dev *indio_dev,
163  uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
164 ssize_t iio_enum_read(struct iio_dev *indio_dev,
165  uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
166 ssize_t iio_enum_write(struct iio_dev *indio_dev,
167  uintptr_t priv, const struct iio_chan_spec *chan, const char *buf,
168  size_t len);
169 
178 #define IIO_ENUM(_name, _shared, _e) \
179 { \
180  .name = (_name), \
181  .shared = (_shared), \
182  .read = iio_enum_read, \
183  .write = iio_enum_write, \
184  .private = (uintptr_t)(_e), \
185 }
186 
195 #define IIO_ENUM_AVAILABLE(_name, _e) \
196 { \
197  .name = (_name "_available"), \
198  .shared = true, \
199  .read = iio_enum_available_read, \
200  .private = (uintptr_t)(_e), \
201 }
202 
244  int channel;
245  int channel2;
246  unsigned long address;
248  struct {
249  char sign;
254  } scan_type;
255  long info_mask;
258  const char *extend_name;
259  const char *datasheet_name;
260  unsigned modified:1;
261  unsigned indexed:1;
262  unsigned output:1;
263  unsigned differential:1;
264 };
265 
266 
275 static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
277 {
278  return chan->info_mask & IIO_CHAN_INFO_BITS(type);
279 }
280 
281 #define IIO_ST(si, rb, sb, sh) \
282  { .sign = si, .realbits = rb, .storagebits = sb, .shift = sh }
283 
284 #define IIO_CHAN_SOFT_TIMESTAMP(_si) \
285  { .type = IIO_TIMESTAMP, .channel = -1, \
286  .scan_index = _si, .scan_type = IIO_ST('s', 64, 64, 0) }
287 
291 static inline s64 iio_get_time_ns(void)
292 {
293  struct timespec ts;
294  /*
295  * calls getnstimeofday.
296  * If hrtimers then up to ns accurate, if not microsecond.
297  */
298  ktime_get_real_ts(&ts);
299 
300  return timespec_to_ns(&ts);
301 }
302 
303 /* Device operating modes */
304 #define INDIO_DIRECT_MODE 0x01
305 #define INDIO_BUFFER_TRIGGERED 0x02
306 #define INDIO_BUFFER_HARDWARE 0x08
307 
308 #define INDIO_ALL_BUFFER_MODES \
309  (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE)
310 
311 struct iio_trigger; /* forward declaration */
312 struct iio_dev;
313 
342 struct iio_info {
345  const struct attribute_group *attrs;
346 
347  int (*read_raw)(struct iio_dev *indio_dev,
348  struct iio_chan_spec const *chan,
349  int *val,
350  int *val2,
351  long mask);
352 
353  int (*write_raw)(struct iio_dev *indio_dev,
354  struct iio_chan_spec const *chan,
355  int val,
356  int val2,
357  long mask);
358 
359  int (*write_raw_get_fmt)(struct iio_dev *indio_dev,
360  struct iio_chan_spec const *chan,
361  long mask);
362 
363  int (*read_event_config)(struct iio_dev *indio_dev,
364  u64 event_code);
365 
366  int (*write_event_config)(struct iio_dev *indio_dev,
367  u64 event_code,
368  int state);
369 
370  int (*read_event_value)(struct iio_dev *indio_dev,
371  u64 event_code,
372  int *val);
373  int (*write_event_value)(struct iio_dev *indio_dev,
374  u64 event_code,
375  int val);
376  int (*validate_trigger)(struct iio_dev *indio_dev,
377  struct iio_trigger *trig);
378  int (*update_scan_mode)(struct iio_dev *indio_dev,
379  const unsigned long *scan_mask);
380  int (*debugfs_reg_access)(struct iio_dev *indio_dev,
381  unsigned reg, unsigned writeval,
382  unsigned *readval);
383 };
384 
396  int (*preenable)(struct iio_dev *);
397  int (*postenable)(struct iio_dev *);
398  int (*predisable)(struct iio_dev *);
399  int (*postdisable)(struct iio_dev *);
400  bool (*validate_scan_mask)(struct iio_dev *indio_dev,
401  const unsigned long *scan_mask);
402 };
403 
441 struct iio_dev {
442  int id;
443 
444  int modes;
446  struct device dev;
447 
449 
450  struct iio_buffer *buffer;
452  struct mutex mlock;
453 
454  const unsigned long *available_scan_masks;
455  unsigned masklength;
456  const unsigned long *active_scan_mask;
459  struct iio_trigger *trig;
461 
464 
467  const char *name;
468  const struct iio_info *info;
471  struct cdev chrdev;
472 #define IIO_MAX_GROUPS 6
475 
476  unsigned long flags;
477 #if defined(CONFIG_DEBUG_FS)
478  struct dentry *debugfs_dentry;
479  unsigned cached_reg_addr;
480 #endif
481 };
482 
488 const struct iio_chan_spec
489 *iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
490 
495 int iio_device_register(struct iio_dev *indio_dev);
496 
501 void iio_device_unregister(struct iio_dev *indio_dev);
502 
509 int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
510 
511 extern struct bus_type iio_bus_type;
512 
517 static inline void iio_device_put(struct iio_dev *indio_dev)
518 {
519  if (indio_dev)
520  put_device(&indio_dev->dev);
521 };
522 
529 static inline struct iio_dev *dev_to_iio_dev(struct device *dev)
530 {
531  return container_of(dev, struct iio_dev, dev);
532 }
533 
540 static inline struct iio_dev *iio_device_get(struct iio_dev *indio_dev)
541 {
542  return indio_dev ? dev_to_iio_dev(get_device(&indio_dev->dev)) : NULL;
543 }
544 
545 
554 static inline void iio_device_set_drvdata(struct iio_dev *indio_dev, void *data)
555 {
556  dev_set_drvdata(&indio_dev->dev, data);
557 }
558 
565 static inline void *iio_device_get_drvdata(struct iio_dev *indio_dev)
566 {
567  return dev_get_drvdata(&indio_dev->dev);
568 }
569 
570 /* Can we make this smaller? */
571 #define IIO_ALIGN L1_CACHE_BYTES
572 
576 struct iio_dev *iio_device_alloc(int sizeof_priv);
577 
578 static inline void *iio_priv(const struct iio_dev *indio_dev)
579 {
580  return (char *)indio_dev + ALIGN(sizeof(struct iio_dev), IIO_ALIGN);
581 }
582 
583 static inline struct iio_dev *iio_priv_to_dev(void *priv)
584 {
585  return (struct iio_dev *)((char *)priv -
586  ALIGN(sizeof(struct iio_dev), IIO_ALIGN));
587 }
588 
593 void iio_device_free(struct iio_dev *indio_dev);
594 
599 static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
600 {
601  return indio_dev->currentmode
603 };
604 
609 #if defined(CONFIG_DEBUG_FS)
610 static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
611 {
612  return indio_dev->debugfs_dentry;
613 };
614 #else
615 static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
616 {
617  return NULL;
618 };
619 #endif
620 
627 #define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL)
628 
635 #define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL)
636 
637 #endif /* _INDUSTRIAL_IO_H_ */