Lines Matching +full:adc +full:- +full:chan
1 // SPDX-License-Identifier: GPL-2.0+
3 * ti-adc161s626.c - Texas Instruments ADC161S626 1-channel differential ADC
5 * ADC Devices Supported:
6 * adc141s626 - 14-bit ADC
7 * adc161s626 - 16-bit ADC
9 * Copyright (C) 2016-2018
25 #define TI_ADC_DRV_NAME "ti-adc161s626"
78 struct iio_chan_spec const *chan, int *val)
82 switch (data->read_size) {
86 ret = spi_read(data->spi, (void *) &buf, 2);
96 ret = spi_read(data->spi, (void *) &buf, 3);
104 return -EINVAL;
107 *val = sign_extend32(*val >> data->shift, chan->scan_type.realbits - 1);
115 struct iio_dev *indio_dev = pf->indio_dev;
119 ret = ti_adc_read_measurement(data, &indio_dev->channels[0],
120 (int *) &data->buffer);
123 data->buffer,
126 iio_trigger_notify_done(indio_dev->trig);
132 struct iio_chan_spec const *chan,
141 return -EBUSY;
142 ret = ti_adc_read_measurement(data, chan, val);
148 ret = regulator_get_voltage(data->ref);
153 *val2 = chan->scan_type.realbits;
157 *val = 1 << (chan->scan_type.realbits - 1);
179 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data));
181 return -ENOMEM;
183 indio_dev->info = &ti_adc_info;
184 indio_dev->name = TI_ADC_DRV_NAME;
185 indio_dev->modes = INDIO_DIRECT_MODE;
188 data->spi = spi;
190 switch (spi_get_device_id(spi)->driver_data) {
192 indio_dev->channels = ti_adc141s626_channels;
193 indio_dev->num_channels = ARRAY_SIZE(ti_adc141s626_channels);
194 data->shift = 0;
195 data->read_size = 2;
198 indio_dev->channels = ti_adc161s626_channels;
199 indio_dev->num_channels = ARRAY_SIZE(ti_adc161s626_channels);
200 data->shift = 6;
201 data->read_size = 3;
205 data->ref = devm_regulator_get(&spi->dev, "vdda");
206 if (IS_ERR(data->ref))
207 return PTR_ERR(data->ref);
209 ret = regulator_enable(data->ref);
213 ret = devm_add_action_or_reset(&spi->dev, ti_adc_reg_disable,
214 data->ref);
218 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, NULL,
223 return devm_iio_device_register(&spi->dev, indio_dev);
251 MODULE_DESCRIPTION("Texas Instruments ADC1x1S 1-channel differential ADC");