187
187
#define AD4170_NUM_ANALOG_PINS 9
188
188
#define AD4170_NUM_GPIO_PINS 4
189
189
#define AD4170_MAX_CHANNELS 16
190
+ #define AD4170_MAX_IIO_CHANNELS (AD4170_MAX_CHANNELS + 1)
190
191
#define AD4170_MAX_ANALOG_PINS 8
191
192
#define AD4170_MAX_SETUPS 8
192
193
#define AD4170_INVALID_SETUP 9
@@ -439,7 +440,7 @@ struct ad4170_state {
439
440
int vrefs_uv [AD4170_MAX_SUP ];
440
441
u32 mclk_hz ;
441
442
struct ad4170_setup_info setup_infos [AD4170_MAX_SETUPS ];
442
- struct iio_chan_spec chans [AD4170_MAX_CHANNELS ];
443
+ struct iio_chan_spec chans [AD4170_MAX_IIO_CHANNELS ];
443
444
struct ad4170_chan_info chan_infos [AD4170_MAX_CHANNELS ];
444
445
struct spi_device * spi ;
445
446
struct regmap * regmap ;
@@ -456,6 +457,7 @@ struct ad4170_state {
456
457
unsigned int clock_ctrl ;
457
458
int gpio_fn [AD4170_NUM_GPIO_PINS ];
458
459
unsigned int cur_src_pins [AD4170_NUM_CURRENT_SRC ];
460
+ unsigned int num_adc_chans ;
459
461
/*
460
462
* DMA (thus cache coherency maintenance) requires the transfer buffers
461
463
* to live in their own cache lines.
@@ -2395,7 +2397,16 @@ static int ad4170_parse_channels(struct iio_dev *indio_dev)
2395
2397
return dev_err_probe (dev , ret , "Invalid input config\n" );
2396
2398
2397
2399
st -> chan_infos [chan_num ].input_range_uv = ret ;
2400
+ chan_num ++ ;
2398
2401
}
2402
+ st -> num_adc_chans = chan_num ;
2403
+
2404
+ /* Add timestamp channel */
2405
+ struct iio_chan_spec ts_chan = IIO_CHAN_SOFT_TIMESTAMP (chan_num );
2406
+
2407
+ st -> chans [chan_num ] = ts_chan ;
2408
+ num_channels = num_channels + 1 ;
2409
+
2399
2410
indio_dev -> num_channels = num_channels ;
2400
2411
indio_dev -> channels = st -> chans ;
2401
2412
@@ -2608,7 +2619,7 @@ static int ad4170_initial_config(struct iio_dev *indio_dev)
2608
2619
return dev_err_probe (dev , ret ,
2609
2620
"Failed to set ADC mode to idle\n" );
2610
2621
2611
- for (i = 0 ; i < indio_dev -> num_channels ; i ++ ) {
2622
+ for (i = 0 ; i < st -> num_adc_chans ; i ++ ) {
2612
2623
struct ad4170_chan_info * chan_info ;
2613
2624
struct iio_chan_spec const * chan ;
2614
2625
struct ad4170_setup * setup ;
@@ -2733,7 +2744,7 @@ static int ad4170_buffer_predisable(struct iio_dev *indio_dev)
2733
2744
* is done after buffer disable. Disable all channels so only requested
2734
2745
* channels will be read.
2735
2746
*/
2736
- for (i = 0 ; i < indio_dev -> num_channels ; i ++ ) {
2747
+ for (i = 0 ; i < st -> num_adc_chans ; i ++ ) {
2737
2748
ret = ad4170_set_channel_enable (st , i , false);
2738
2749
if (ret )
2739
2750
return ret ;
@@ -2785,7 +2796,9 @@ static irqreturn_t ad4170_trigger_handler(int irq, void *p)
2785
2796
memcpy (& st -> bounce_buffer [i ++ ], st -> rx_buf , ARRAY_SIZE (st -> rx_buf ));
2786
2797
}
2787
2798
2788
- iio_push_to_buffers (indio_dev , st -> bounce_buffer );
2799
+ iio_push_to_buffers_with_ts (indio_dev , st -> bounce_buffer ,
2800
+ sizeof (st -> bounce_buffer ),
2801
+ iio_get_time_ns (indio_dev ));
2789
2802
err_out :
2790
2803
iio_trigger_notify_done (indio_dev -> trig );
2791
2804
return IRQ_HANDLED ;
0 commit comments