These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / iio / iio_simple_dummy.h
1 /**
2  * Copyright (c) 2011 Jonathan Cameron
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 as published by
6  * the Free Software Foundation.
7  *
8  * Join together the various functionality of iio_simple_dummy driver
9  */
10
11 #ifndef _IIO_SIMPLE_DUMMY_H_
12 #define _IIO_SIMPLE_DUMMY_H_
13 #include <linux/kernel.h>
14
15 struct iio_dummy_accel_calibscale;
16 struct iio_dummy_regs;
17
18 /**
19  * struct iio_dummy_state - device instance specific state.
20  * @dac_val:                    cache for dac value
21  * @single_ended_adc_val:       cache for single ended adc value
22  * @differential_adc_val:       cache for differential adc value
23  * @accel_val:                  cache for acceleration value
24  * @accel_calibbias:            cache for acceleration calibbias
25  * @accel_calibscale:           cache for acceleration calibscale
26  * @lock:                       lock to ensure state is consistent
27  * @event_irq:                  irq number for event line (faked)
28  * @event_val:                  cache for event threshold value
29  * @event_en:                   cache of whether event is enabled
30  */
31 struct iio_dummy_state {
32         int dac_val;
33         int single_ended_adc_val;
34         int differential_adc_val[2];
35         int accel_val;
36         int accel_calibbias;
37         int activity_running;
38         int activity_walking;
39         const struct iio_dummy_accel_calibscale *accel_calibscale;
40         struct mutex lock;
41         struct iio_dummy_regs *regs;
42         int steps_enabled;
43         int steps;
44         int height;
45 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
46         int event_irq;
47         int event_val;
48         bool event_en;
49         s64 event_timestamp;
50 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
51 };
52
53 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
54
55 struct iio_dev;
56
57 int iio_simple_dummy_read_event_config(struct iio_dev *indio_dev,
58                                        const struct iio_chan_spec *chan,
59                                        enum iio_event_type type,
60                                        enum iio_event_direction dir);
61
62 int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,
63                                         const struct iio_chan_spec *chan,
64                                         enum iio_event_type type,
65                                         enum iio_event_direction dir,
66                                         int state);
67
68 int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,
69                                       const struct iio_chan_spec *chan,
70                                       enum iio_event_type type,
71                                       enum iio_event_direction dir,
72                                       enum iio_event_info info, int *val,
73                                       int *val2);
74
75 int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
76                                        const struct iio_chan_spec *chan,
77                                        enum iio_event_type type,
78                                        enum iio_event_direction dir,
79                                        enum iio_event_info info, int val,
80                                        int val2);
81
82 int iio_simple_dummy_events_register(struct iio_dev *indio_dev);
83 void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev);
84
85 #else /* Stubs for when events are disabled at compile time */
86
87 static inline int
88 iio_simple_dummy_events_register(struct iio_dev *indio_dev)
89 {
90         return 0;
91 };
92
93 static inline void
94 iio_simple_dummy_events_unregister(struct iio_dev *indio_dev)
95 { };
96
97 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/
98
99 /**
100  * enum iio_simple_dummy_scan_elements - scan index enum
101  * @DUMMY_INDEX_VOLTAGE_0:         the single ended voltage channel
102  * @DUMMY_INDEX_DIFFVOLTAGE_1M2:   first differential channel
103  * @DUMMY_INDEX_DIFFVOLTAGE_3M4:   second differential channel
104  * @DUMMY_INDEX_ACCELX:            acceleration channel
105  *
106  * Enum provides convenient numbering for the scan index.
107  */
108 enum iio_simple_dummy_scan_elements {
109         DUMMY_INDEX_VOLTAGE_0,
110         DUMMY_INDEX_DIFFVOLTAGE_1M2,
111         DUMMY_INDEX_DIFFVOLTAGE_3M4,
112         DUMMY_INDEX_ACCELX,
113 };
114
115 #ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
116 int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev);
117 void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev);
118 #else
119 static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
120 {
121         return 0;
122 };
123
124 static inline
125 void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev)
126 {};
127
128 #endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */
129 #endif /* _IIO_SIMPLE_DUMMY_H_ */