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