56
56
BIT(IIO_CHAN_INFO_SCALE) | \
57
57
(_offl ? BIT(IIO_CHAN_INFO_SAMP_FREQ) : 0), \
58
58
.info_mask_separate_available = (_reg_access ? BIT(IIO_CHAN_INFO_SCALE) : 0),\
59
+ .scan_index = 0, \
59
60
.scan_type = { \
60
61
.sign = _sign, \
61
62
.realbits = _real_bits, \
70
71
(((_offl) || ((_real_bits) > 16)) ? 32 : 16), \
71
72
(_reg_access), (_offl))
72
73
74
+ #define AD4000_DIFF_CHANNELS (_sign , _real_bits , _reg_access , _offl ) \
75
+ { \
76
+ AD4000_DIFF_CHANNEL(_sign, _real_bits, _reg_access, _offl), \
77
+ IIO_CHAN_SOFT_TIMESTAMP(1) \
78
+ }
79
+
73
80
#define __AD4000_PSEUDO_DIFF_CHANNEL (_sign , _real_bits , _storage_bits , \
74
81
_reg_access , _offl ) \
75
82
{ \
81
88
BIT(IIO_CHAN_INFO_OFFSET) | \
82
89
(_offl ? BIT(IIO_CHAN_INFO_SAMP_FREQ) : 0), \
83
90
.info_mask_separate_available = (_reg_access ? BIT(IIO_CHAN_INFO_SCALE) : 0),\
91
+ .scan_index = 0, \
84
92
.scan_type = { \
85
93
.sign = _sign, \
86
94
.realbits = _real_bits, \
95
103
(((_offl) || ((_real_bits) > 16)) ? 32 : 16),\
96
104
(_reg_access), (_offl))
97
105
106
+ #define AD4000_PSEUDO_DIFF_CHANNELS (_sign , _real_bits , _reg_access , _offl ) \
107
+ { \
108
+ AD4000_PSEUDO_DIFF_CHANNEL(_sign, _real_bits, _reg_access, _offl), \
109
+ IIO_CHAN_SOFT_TIMESTAMP(1) \
110
+ }
111
+
98
112
static const char * const ad4000_power_supplies [] = {
99
113
"vdd" , "vio"
100
114
};
@@ -121,8 +135,8 @@ static const int ad4000_gains[] = {
121
135
122
136
struct ad4000_chip_info {
123
137
const char * dev_name ;
124
- struct iio_chan_spec chan_spec ;
125
- struct iio_chan_spec reg_access_chan_spec ;
138
+ struct iio_chan_spec chan_spec [ 2 ] ;
139
+ struct iio_chan_spec reg_access_chan_spec [ 2 ] ;
126
140
struct iio_chan_spec offload_chan_spec ;
127
141
struct iio_chan_spec reg_access_offload_chan_spec ;
128
142
bool has_hardware_gain ;
@@ -131,134 +145,134 @@ struct ad4000_chip_info {
131
145
132
146
static const struct ad4000_chip_info ad4000_chip_info = {
133
147
.dev_name = "ad4000" ,
134
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 0 ),
135
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 0 ),
148
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 0 , 0 ),
149
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 1 , 0 ),
136
150
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 1 ),
137
151
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 1 ),
138
152
.max_rate_hz = 2 * MEGA ,
139
153
};
140
154
141
155
static const struct ad4000_chip_info ad4001_chip_info = {
142
156
.dev_name = "ad4001" ,
143
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 0 ),
144
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 0 ),
157
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 0 , 0 ),
158
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 1 , 0 ),
145
159
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 1 ),
146
160
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 1 ),
147
161
.max_rate_hz = 2 * MEGA ,
148
162
};
149
163
150
164
static const struct ad4000_chip_info ad4002_chip_info = {
151
165
.dev_name = "ad4002" ,
152
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 0 ),
153
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 0 ),
166
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 0 , 0 ),
167
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 1 , 0 ),
154
168
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 1 ),
155
169
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 1 ),
156
170
.max_rate_hz = 2 * MEGA ,
157
171
};
158
172
159
173
static const struct ad4000_chip_info ad4003_chip_info = {
160
174
.dev_name = "ad4003" ,
161
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 0 ),
162
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 0 ),
175
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 0 , 0 ),
176
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 1 , 0 ),
163
177
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 1 ),
164
178
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 1 ),
165
179
.max_rate_hz = 2 * MEGA ,
166
180
};
167
181
168
182
static const struct ad4000_chip_info ad4004_chip_info = {
169
183
.dev_name = "ad4004" ,
170
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 0 ),
171
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 0 ),
184
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 0 , 0 ),
185
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 1 , 0 ),
172
186
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 1 ),
173
187
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 1 ),
174
188
.max_rate_hz = 1 * MEGA ,
175
189
};
176
190
177
191
static const struct ad4000_chip_info ad4005_chip_info = {
178
192
.dev_name = "ad4005" ,
179
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 0 ),
180
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 0 ),
193
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 0 , 0 ),
194
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 1 , 0 ),
181
195
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 1 ),
182
196
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 1 ),
183
197
.max_rate_hz = 1 * MEGA ,
184
198
};
185
199
186
200
static const struct ad4000_chip_info ad4006_chip_info = {
187
201
.dev_name = "ad4006" ,
188
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 0 ),
189
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 0 ),
202
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 0 , 0 ),
203
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 1 , 0 ),
190
204
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 1 ),
191
205
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 1 ),
192
206
.max_rate_hz = 1 * MEGA ,
193
207
};
194
208
195
209
static const struct ad4000_chip_info ad4007_chip_info = {
196
210
.dev_name = "ad4007" ,
197
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 0 ),
198
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 0 ),
211
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 0 , 0 ),
212
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 1 , 0 ),
199
213
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 1 ),
200
214
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 1 ),
201
215
.max_rate_hz = 1 * MEGA ,
202
216
};
203
217
204
218
static const struct ad4000_chip_info ad4008_chip_info = {
205
219
.dev_name = "ad4008" ,
206
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 0 ),
207
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 0 ),
220
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 0 , 0 ),
221
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 16 , 1 , 0 ),
208
222
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 0 , 1 ),
209
223
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 16 , 1 , 1 ),
210
224
.max_rate_hz = 500 * KILO ,
211
225
};
212
226
213
227
static const struct ad4000_chip_info ad4010_chip_info = {
214
228
.dev_name = "ad4010" ,
215
- .chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 0 ),
216
- .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 0 ),
229
+ .chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 0 , 0 ),
230
+ .reg_access_chan_spec = AD4000_PSEUDO_DIFF_CHANNELS ('u' , 18 , 1 , 0 ),
217
231
.offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 0 , 1 ),
218
232
.reg_access_offload_chan_spec = AD4000_PSEUDO_DIFF_CHANNEL ('u' , 18 , 1 , 1 ),
219
233
.max_rate_hz = 500 * KILO ,
220
234
};
221
235
222
236
static const struct ad4000_chip_info ad4011_chip_info = {
223
237
.dev_name = "ad4011" ,
224
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 0 ),
225
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 0 ),
238
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 0 , 0 ),
239
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 1 , 0 ),
226
240
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 1 ),
227
241
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 1 ),
228
242
.max_rate_hz = 500 * KILO ,
229
243
};
230
244
231
245
static const struct ad4000_chip_info ad4020_chip_info = {
232
246
.dev_name = "ad4020" ,
233
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 0 ),
234
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 0 ),
247
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 0 , 0 ),
248
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 1 , 0 ),
235
249
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 1 ),
236
250
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 1 ),
237
251
.max_rate_hz = 1800 * KILO ,
238
252
};
239
253
240
254
static const struct ad4000_chip_info ad4021_chip_info = {
241
255
.dev_name = "ad4021" ,
242
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 0 ),
243
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 0 ),
256
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 0 , 0 ),
257
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 1 , 0 ),
244
258
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 1 ),
245
259
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 1 ),
246
260
.max_rate_hz = 1 * MEGA ,
247
261
};
248
262
249
263
static const struct ad4000_chip_info ad4022_chip_info = {
250
264
.dev_name = "ad4022" ,
251
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 0 ),
252
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 0 ),
265
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 0 , 0 ),
266
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 20 , 1 , 0 ),
253
267
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 0 , 1 ),
254
268
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 20 , 1 , 1 ),
255
269
.max_rate_hz = 500 * KILO ,
256
270
};
257
271
258
272
static const struct ad4000_chip_info adaq4001_chip_info = {
259
273
.dev_name = "adaq4001" ,
260
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 0 ),
261
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 0 ),
274
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 0 , 0 ),
275
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 16 , 1 , 0 ),
262
276
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 0 , 1 ),
263
277
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 16 , 1 , 1 ),
264
278
.has_hardware_gain = true,
@@ -267,8 +281,8 @@ static const struct ad4000_chip_info adaq4001_chip_info = {
267
281
268
282
static const struct ad4000_chip_info adaq4003_chip_info = {
269
283
.dev_name = "adaq4003" ,
270
- .chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 0 ),
271
- .reg_access_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 0 ),
284
+ .chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 0 , 0 ),
285
+ .reg_access_chan_spec = AD4000_DIFF_CHANNELS ('s' , 18 , 1 , 0 ),
272
286
.offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 0 , 1 ),
273
287
.reg_access_offload_chan_spec = AD4000_DIFF_CHANNEL ('s' , 18 , 1 , 1 ),
274
288
.has_hardware_gain = true,
@@ -886,11 +900,11 @@ static int ad4000_probe(struct spi_device *spi)
886
900
887
901
if (st -> using_offload ) {
888
902
indio_dev -> channels = & chip -> reg_access_offload_chan_spec ;
889
- ret = ad4000_prepare_offload_turbo_message (st , indio_dev -> channels );
903
+ ret = ad4000_prepare_offload_turbo_message (st , & indio_dev -> channels [ 0 ] );
890
904
if (ret )
891
905
return ret ;
892
906
} else {
893
- indio_dev -> channels = & chip -> reg_access_chan_spec ;
907
+ indio_dev -> channels = chip -> reg_access_chan_spec ;
894
908
}
895
909
ret = ad4000_prepare_3wire_mode_message (st , & indio_dev -> channels [0 ]);
896
910
if (ret )
@@ -908,12 +922,12 @@ static int ad4000_probe(struct spi_device *spi)
908
922
909
923
spi -> cs_hold .value = AD4000_TCONV_NS ;
910
924
spi -> cs_hold .unit = SPI_DELAY_UNIT_NSECS ;
911
- ret = ad4000_prepare_offload_message (st , indio_dev -> channels );
925
+ ret = ad4000_prepare_offload_message (st , & indio_dev -> channels [ 0 ] );
912
926
if (ret )
913
927
return ret ;
914
928
} else {
915
929
indio_dev -> info = & ad4000_info ;
916
- indio_dev -> channels = & chip -> chan_spec ;
930
+ indio_dev -> channels = chip -> chan_spec ;
917
931
}
918
932
ret = ad4000_prepare_3wire_mode_message (st , & indio_dev -> channels [0 ]);
919
933
if (ret )
@@ -926,7 +940,7 @@ static int ad4000_probe(struct spi_device *spi)
926
940
"Unsupported sdi-pin + offload config\n" );
927
941
928
942
indio_dev -> info = & ad4000_info ;
929
- indio_dev -> channels = & chip -> chan_spec ;
943
+ indio_dev -> channels = chip -> chan_spec ;
930
944
ret = ad4000_prepare_4wire_mode_message (st , indio_dev -> channels );
931
945
if (ret )
932
946
return ret ;
@@ -942,7 +956,10 @@ static int ad4000_probe(struct spi_device *spi)
942
956
943
957
st -> max_rate_hz = chip -> max_rate_hz ;
944
958
indio_dev -> name = chip -> dev_name ;
945
- indio_dev -> num_channels = 1 ;
959
+ if (st -> using_offload )
960
+ indio_dev -> num_channels = 1 ;
961
+ else
962
+ indio_dev -> num_channels = 2 ;
946
963
947
964
ret = devm_mutex_init (dev , & st -> lock );
948
965
if (ret )
@@ -963,7 +980,7 @@ static int ad4000_probe(struct spi_device *spi)
963
980
}
964
981
}
965
982
966
- ad4000_fill_scale_tbl (st , indio_dev -> channels );
983
+ ad4000_fill_scale_tbl (st , & indio_dev -> channels [ 0 ] );
967
984
968
985
if (st -> using_offload ) {
969
986
ret = ad4000_pwm_setup (spi , st );
0 commit comments