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