@@ -175,17 +175,17 @@ static const struct iio_chan_spec ad7616_channels[] = {
175
175
AD7606_CHANNEL (15 , 16 ),
176
176
};
177
177
178
- static int ad7606c_18bit_chan_scale_setup (struct ad7606_state * st ,
178
+ static int ad7606c_18bit_chan_scale_setup (struct iio_dev * indio_dev ,
179
179
struct iio_chan_spec * chan , int ch );
180
- static int ad7606c_16bit_chan_scale_setup (struct ad7606_state * st ,
180
+ static int ad7606c_16bit_chan_scale_setup (struct iio_dev * indio_dev ,
181
181
struct iio_chan_spec * chan , int ch );
182
- static int ad7606_16bit_chan_scale_setup (struct ad7606_state * st ,
182
+ static int ad7606_16bit_chan_scale_setup (struct iio_dev * indio_dev ,
183
183
struct iio_chan_spec * chan , int ch );
184
- static int ad7607_chan_scale_setup (struct ad7606_state * st ,
184
+ static int ad7607_chan_scale_setup (struct iio_dev * indio_dev ,
185
185
struct iio_chan_spec * chan , int ch );
186
- static int ad7608_chan_scale_setup (struct ad7606_state * st ,
186
+ static int ad7608_chan_scale_setup (struct iio_dev * indio_dev ,
187
187
struct iio_chan_spec * chan , int ch );
188
- static int ad7609_chan_scale_setup (struct ad7606_state * st ,
188
+ static int ad7609_chan_scale_setup (struct iio_dev * indio_dev ,
189
189
struct iio_chan_spec * chan , int ch );
190
190
191
191
const struct ad7606_chip_info ad7605_4_info = {
@@ -323,9 +323,10 @@ int ad7606_reset(struct ad7606_state *st)
323
323
}
324
324
EXPORT_SYMBOL_NS_GPL (ad7606_reset , "IIO_AD7606" );
325
325
326
- static int ad7606_16bit_chan_scale_setup (struct ad7606_state * st ,
326
+ static int ad7606_16bit_chan_scale_setup (struct iio_dev * indio_dev ,
327
327
struct iio_chan_spec * chan , int ch )
328
328
{
329
+ struct ad7606_state * st = iio_priv (indio_dev );
329
330
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
330
331
331
332
if (!st -> sw_mode_en ) {
@@ -345,10 +346,12 @@ static int ad7606_16bit_chan_scale_setup(struct ad7606_state *st,
345
346
return 0 ;
346
347
}
347
348
348
- static int ad7606_get_chan_config (struct ad7606_state * st , int ch ,
349
+ static int ad7606_get_chan_config (struct iio_dev * indio_dev , int ch ,
349
350
bool * bipolar , bool * differential )
350
351
{
351
- unsigned int num_channels = st -> chip_info -> num_channels - 1 ;
352
+ struct ad7606_state * st = iio_priv (indio_dev );
353
+ unsigned int num_channels = st -> chip_info -> num_adc_channels ;
354
+ unsigned int offset = indio_dev -> num_channels - st -> chip_info -> num_adc_channels ;
352
355
struct device * dev = st -> dev ;
353
356
int ret ;
354
357
@@ -364,7 +367,7 @@ static int ad7606_get_chan_config(struct ad7606_state *st, int ch,
364
367
continue ;
365
368
366
369
/* channel number (here) is from 1 to num_channels */
367
- if (reg == 0 || reg > num_channels ) {
370
+ if (reg < offset || reg > num_channels ) {
368
371
dev_warn (dev ,
369
372
"Invalid channel number (ignoring): %d\n" , reg );
370
373
continue ;
@@ -399,9 +402,10 @@ static int ad7606_get_chan_config(struct ad7606_state *st, int ch,
399
402
return 0 ;
400
403
}
401
404
402
- static int ad7606c_18bit_chan_scale_setup (struct ad7606_state * st ,
405
+ static int ad7606c_18bit_chan_scale_setup (struct iio_dev * indio_dev ,
403
406
struct iio_chan_spec * chan , int ch )
404
407
{
408
+ struct ad7606_state * st = iio_priv (indio_dev );
405
409
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
406
410
bool bipolar , differential ;
407
411
int ret ;
@@ -413,7 +417,7 @@ static int ad7606c_18bit_chan_scale_setup(struct ad7606_state *st,
413
417
return 0 ;
414
418
}
415
419
416
- ret = ad7606_get_chan_config (st , ch , & bipolar , & differential );
420
+ ret = ad7606_get_chan_config (indio_dev , ch , & bipolar , & differential );
417
421
if (ret )
418
422
return ret ;
419
423
@@ -455,9 +459,10 @@ static int ad7606c_18bit_chan_scale_setup(struct ad7606_state *st,
455
459
return 0 ;
456
460
}
457
461
458
- static int ad7606c_16bit_chan_scale_setup (struct ad7606_state * st ,
462
+ static int ad7606c_16bit_chan_scale_setup (struct iio_dev * indio_dev ,
459
463
struct iio_chan_spec * chan , int ch )
460
464
{
465
+ struct ad7606_state * st = iio_priv (indio_dev );
461
466
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
462
467
bool bipolar , differential ;
463
468
int ret ;
@@ -469,7 +474,7 @@ static int ad7606c_16bit_chan_scale_setup(struct ad7606_state *st,
469
474
return 0 ;
470
475
}
471
476
472
- ret = ad7606_get_chan_config (st , ch , & bipolar , & differential );
477
+ ret = ad7606_get_chan_config (indio_dev , ch , & bipolar , & differential );
473
478
if (ret )
474
479
return ret ;
475
480
@@ -512,9 +517,10 @@ static int ad7606c_16bit_chan_scale_setup(struct ad7606_state *st,
512
517
return 0 ;
513
518
}
514
519
515
- static int ad7607_chan_scale_setup (struct ad7606_state * st ,
520
+ static int ad7607_chan_scale_setup (struct iio_dev * indio_dev ,
516
521
struct iio_chan_spec * chan , int ch )
517
522
{
523
+ struct ad7606_state * st = iio_priv (indio_dev );
518
524
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
519
525
520
526
cs -> range = 0 ;
@@ -523,9 +529,10 @@ static int ad7607_chan_scale_setup(struct ad7606_state *st,
523
529
return 0 ;
524
530
}
525
531
526
- static int ad7608_chan_scale_setup (struct ad7606_state * st ,
532
+ static int ad7608_chan_scale_setup (struct iio_dev * indio_dev ,
527
533
struct iio_chan_spec * chan , int ch )
528
534
{
535
+ struct ad7606_state * st = iio_priv (indio_dev );
529
536
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
530
537
531
538
cs -> range = 0 ;
@@ -534,9 +541,10 @@ static int ad7608_chan_scale_setup(struct ad7606_state *st,
534
541
return 0 ;
535
542
}
536
543
537
- static int ad7609_chan_scale_setup (struct ad7606_state * st ,
544
+ static int ad7609_chan_scale_setup (struct iio_dev * indio_dev ,
538
545
struct iio_chan_spec * chan , int ch )
539
546
{
547
+ struct ad7606_state * st = iio_priv (indio_dev );
540
548
struct ad7606_chan_scale * cs = & st -> chan_scales [ch ];
541
549
542
550
cs -> range = 0 ;
@@ -1146,8 +1154,8 @@ static int ad7606_sw_mode_setup(struct iio_dev *indio_dev)
1146
1154
1147
1155
static int ad7606_chan_scales_setup (struct iio_dev * indio_dev )
1148
1156
{
1149
- unsigned int num_channels = indio_dev -> num_channels - 1 ;
1150
1157
struct ad7606_state * st = iio_priv (indio_dev );
1158
+ unsigned int offset = indio_dev -> num_channels - st -> chip_info -> num_adc_channels ;
1151
1159
struct iio_chan_spec * chans ;
1152
1160
size_t size ;
1153
1161
int ch , ret ;
@@ -1161,8 +1169,8 @@ static int ad7606_chan_scales_setup(struct iio_dev *indio_dev)
1161
1169
memcpy (chans , indio_dev -> channels , size );
1162
1170
indio_dev -> channels = chans ;
1163
1171
1164
- for (ch = 0 ; ch < num_channels ; ch ++ ) {
1165
- ret = st -> chip_info -> scale_setup_cb (st , & chans [ch + 1 ], ch );
1172
+ for (ch = 0 ; ch < st -> chip_info -> num_adc_channels ; ch ++ ) {
1173
+ ret = st -> chip_info -> scale_setup_cb (indio_dev , & chans [ch + offset ], ch );
1166
1174
if (ret )
1167
1175
return ret ;
1168
1176
}
0 commit comments