]>
Commit | Line | Data |
---|---|---|
e6477000 JC |
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 | ||
f3f883b4 RD |
11 | #ifndef _IIO_SIMPLE_DUMMY_H_ |
12 | #define _IIO_SIMPLE_DUMMY_H_ | |
e6477000 JC |
13 | #include <linux/kernel.h> |
14 | ||
15 | struct iio_dummy_accel_calibscale; | |
356ae946 | 16 | struct iio_dummy_regs; |
e6477000 JC |
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) | |
69e98df7 | 28 | * @event_val: cache for event threshold value |
e6477000 JC |
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; | |
3e34e650 DB |
37 | int activity_running; |
38 | int activity_walking; | |
e6477000 JC |
39 | const struct iio_dummy_accel_calibscale *accel_calibscale; |
40 | struct mutex lock; | |
356ae946 | 41 | struct iio_dummy_regs *regs; |
3e34e650 DB |
42 | int steps_enabled; |
43 | int steps; | |
44 | int height; | |
e6477000 JC |
45 | #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS |
46 | int event_irq; | |
47 | int event_val; | |
48 | bool event_en; | |
fd2bb310 | 49 | s64 event_timestamp; |
e6477000 JC |
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, | |
bda624b0 LPC |
58 | const struct iio_chan_spec *chan, |
59 | enum iio_event_type type, | |
60 | enum iio_event_direction dir); | |
e6477000 JC |
61 | |
62 | int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev, | |
bda624b0 LPC |
63 | const struct iio_chan_spec *chan, |
64 | enum iio_event_type type, | |
65 | enum iio_event_direction dir, | |
e6477000 JC |
66 | int state); |
67 | ||
68 | int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev, | |
bda624b0 LPC |
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); | |
e6477000 JC |
74 | |
75 | int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev, | |
bda624b0 LPC |
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); | |
e6477000 JC |
81 | |
82 | int iio_simple_dummy_events_register(struct iio_dev *indio_dev); | |
62a90da6 | 83 | void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev); |
e6477000 JC |
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 | ||
62a90da6 | 93 | static inline void |
e6477000 | 94 | iio_simple_dummy_events_unregister(struct iio_dev *indio_dev) |
62a90da6 | 95 | { }; |
e6477000 JC |
96 | |
97 | #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/ | |
98 | ||
9ad2e2e1 JC |
99 | /** |
100 | * enum iio_simple_dummy_scan_elements - scan index enum | |
f8087abc AS |
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 | |
9ad2e2e1 JC |
105 | * |
106 | * Enum provides convenient numbering for the scan index. | |
107 | */ | |
108 | enum iio_simple_dummy_scan_elements { | |
f8087abc AS |
109 | DUMMY_INDEX_VOLTAGE_0, |
110 | DUMMY_INDEX_DIFFVOLTAGE_1M2, | |
111 | DUMMY_INDEX_DIFFVOLTAGE_3M4, | |
112 | DUMMY_INDEX_ACCELX, | |
9ad2e2e1 | 113 | }; |
e6477000 | 114 | |
9ad2e2e1 | 115 | #ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER |
4ae03019 | 116 | int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev); |
9ad2e2e1 JC |
117 | void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev); |
118 | #else | |
75d44ce0 | 119 | static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev) |
9ad2e2e1 JC |
120 | { |
121 | return 0; | |
122 | }; | |
862cb6ce | 123 | |
9ad2e2e1 JC |
124 | static inline |
125 | void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev) | |
126 | {}; | |
f3f883b4 | 127 | |
9ad2e2e1 | 128 | #endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */ |
f3f883b4 | 129 | #endif /* _IIO_SIMPLE_DUMMY_H_ */ |