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 theshold 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 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
50 };
51 
52 #ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
53 
54 struct iio_dev;
55 
56 int iio_simple_dummy_read_event_config(struct iio_dev *indio_dev,
57 				       const struct iio_chan_spec *chan,
58 				       enum iio_event_type type,
59 				       enum iio_event_direction dir);
60 
61 int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,
62 					const struct iio_chan_spec *chan,
63 					enum iio_event_type type,
64 					enum iio_event_direction dir,
65 					int state);
66 
67 int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,
68 				      const struct iio_chan_spec *chan,
69 				      enum iio_event_type type,
70 				      enum iio_event_direction dir,
71 				      enum iio_event_info info, int *val,
72 				      int *val2);
73 
74 int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
75 				       const struct iio_chan_spec *chan,
76 				       enum iio_event_type type,
77 				       enum iio_event_direction dir,
78 				       enum iio_event_info info, int val,
79 				       int val2);
80 
81 int iio_simple_dummy_events_register(struct iio_dev *indio_dev);
82 int iio_simple_dummy_events_unregister(struct iio_dev *indio_dev);
83 
84 #else /* Stubs for when events are disabled at compile time */
85 
86 static inline int
iio_simple_dummy_events_register(struct iio_dev * indio_dev)87 iio_simple_dummy_events_register(struct iio_dev *indio_dev)
88 {
89 	return 0;
90 };
91 
92 static inline int
iio_simple_dummy_events_unregister(struct iio_dev * indio_dev)93 iio_simple_dummy_events_unregister(struct iio_dev *indio_dev)
94 {
95 	return 0;
96 };
97 
98 #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/
99 
100 /**
101  * enum iio_simple_dummy_scan_elements - scan index enum
102  * @voltage0:		the single ended voltage channel
103  * @diffvoltage1m2:	first differential channel
104  * @diffvoltage3m4:	second differenial channel
105  * @accelx:		acceleration channel
106  *
107  * Enum provides convenient numbering for the scan index.
108  */
109 enum iio_simple_dummy_scan_elements {
110 	voltage0,
111 	diffvoltage1m2,
112 	diffvoltage3m4,
113 	accelx,
114 };
115 
116 #ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
117 int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev);
118 void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev);
119 #else
iio_simple_dummy_configure_buffer(struct iio_dev * indio_dev)120 static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
121 {
122 	return 0;
123 };
124 static inline
iio_simple_dummy_unconfigure_buffer(struct iio_dev * indio_dev)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_ */
130