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