1
2
3
4
5
6
7
8
9
10
11
12#ifndef _AD799X_H_
13#define _AD799X_H_
14
15#define AD799X_CHANNEL_SHIFT 4
16#define AD799X_STORAGEBITS 16
17
18
19
20
21#define AD7991_REF_SEL 0x08
22#define AD7991_FLTR 0x04
23#define AD7991_BIT_TRIAL_DELAY 0x02
24#define AD7991_SAMPLE_DELAY 0x01
25
26
27
28
29
30#define AD7998_FLTR 0x08
31#define AD7998_ALERT_EN 0x04
32#define AD7998_BUSY_ALERT 0x02
33#define AD7998_BUSY_ALERT_POL 0x01
34
35#define AD7998_CONV_RES_REG 0x0
36#define AD7998_ALERT_STAT_REG 0x1
37#define AD7998_CONF_REG 0x2
38#define AD7998_CYCLE_TMR_REG 0x3
39#define AD7998_DATALOW_CH1_REG 0x4
40#define AD7998_DATAHIGH_CH1_REG 0x5
41#define AD7998_HYST_CH1_REG 0x6
42#define AD7998_DATALOW_CH2_REG 0x7
43#define AD7998_DATAHIGH_CH2_REG 0x8
44#define AD7998_HYST_CH2_REG 0x9
45#define AD7998_DATALOW_CH3_REG 0xA
46#define AD7998_DATAHIGH_CH3_REG 0xB
47#define AD7998_HYST_CH3_REG 0xC
48#define AD7998_DATALOW_CH4_REG 0xD
49#define AD7998_DATAHIGH_CH4_REG 0xE
50#define AD7998_HYST_CH4_REG 0xF
51
52#define AD7998_CYC_MASK 0x7
53#define AD7998_CYC_DIS 0x0
54#define AD7998_CYC_TCONF_32 0x1
55#define AD7998_CYC_TCONF_64 0x2
56#define AD7998_CYC_TCONF_128 0x3
57#define AD7998_CYC_TCONF_256 0x4
58#define AD7998_CYC_TCONF_512 0x5
59#define AD7998_CYC_TCONF_1024 0x6
60#define AD7998_CYC_TCONF_2048 0x7
61
62#define AD7998_ALERT_STAT_CLEAR 0xFF
63
64
65
66
67
68#define AD7997_8_READ_SINGLE 0x80
69#define AD7997_8_READ_SEQUENCE 0x70
70
71enum {
72 ad7991,
73 ad7995,
74 ad7999,
75 ad7992,
76 ad7993,
77 ad7994,
78 ad7997,
79 ad7998
80};
81
82struct ad799x_state;
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97struct ad799x_chip_info {
98 u8 num_inputs;
99 u8 bits;
100 u8 storagebits;
101 char sign;
102 u16 int_vref_mv;
103 bool monitor_mode;
104 u16 default_config;
105 struct attribute_group *dev_attrs;
106 struct attribute_group *scan_attrs;
107 struct attribute_group *event_attrs;
108 int (*ad799x_set_scan_mode) (struct ad799x_state *st,
109 unsigned mask);
110};
111
112struct ad799x_state {
113 struct iio_dev *indio_dev;
114 struct i2c_client *client;
115 const struct ad799x_chip_info *chip_info;
116 struct work_struct poll_work;
117 struct work_struct work_thresh;
118 atomic_t protect_ring;
119 struct iio_trigger *trig;
120 struct regulator *reg;
121 s64 last_timestamp;
122 u16 int_vref_mv;
123 unsigned id;
124 char *name;
125 u16 config;
126};
127
128
129
130
131
132struct ad799x_platform_data {
133 u16 vref_mv;
134};
135
136int ad799x_set_scan_mode(struct ad799x_state *st, unsigned mask);
137
138#ifdef CONFIG_AD799X_RING_BUFFER
139int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask);
140int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
141void ad799x_ring_cleanup(struct iio_dev *indio_dev);
142#else
143int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask)
144{
145 return -EINVAL;
146}
147
148
149static inline int
150ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
151{
152 return 0;
153}
154
155static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
156{
157}
158#endif
159#endif
160