Lines Matching +full:adc +full:- +full:diff +full:- +full:channels
1 // SPDX-License-Identifier: GPL-2.0-only
29 #define STX104_IN_CHAN(chan, diff) { \ argument
37 .differential = diff \
62 /* ADC Channel */
68 /* ADC Status */
73 /* ADC Control */
77 /* ADC Configuration */
87 * struct stx104_iio - IIO device private data structure
182 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
189 if (chan->output) { in stx104_read_raw()
190 err = regmap_read(priv->aio_data_map, STX104_DAC_OFFSET(chan->channel), in stx104_read_raw()
198 mutex_lock(&priv->lock); in stx104_read_raw()
200 /* select ADC channel */ in stx104_read_raw()
201 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CHANNEL, in stx104_read_raw()
202 STX104_SINGLE_CHANNEL(chan->channel)); in stx104_read_raw()
204 mutex_unlock(&priv->lock); in stx104_read_raw()
209 * Trigger ADC sample capture by writing to the 8-bit Software Strobe Register and in stx104_read_raw()
216 err = regmap_write(priv->aio_ctl_map, STX104_SOFTWARE_STROBE, 0); in stx104_read_raw()
218 mutex_unlock(&priv->lock); in stx104_read_raw()
221 err = regmap_read_poll_timeout(priv->aio_ctl_map, STX104_ADC_STATUS, adc_status, in stx104_read_raw()
224 mutex_unlock(&priv->lock); in stx104_read_raw()
228 err = regmap_read(priv->aio_data_map, STX104_ADC_DATA, &value); in stx104_read_raw()
230 mutex_unlock(&priv->lock); in stx104_read_raw()
235 mutex_unlock(&priv->lock); in stx104_read_raw()
238 /* get ADC bipolar/unipolar configuration */ in stx104_read_raw()
239 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
243 *val = (u8_get_bits(adc_config, STX104_ADBU) == STX104_BIPOLAR) ? -32768 : 0; in stx104_read_raw()
246 /* get ADC bipolar/unipolar and gain configuration */ in stx104_read_raw()
247 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
257 return -EINVAL; in stx104_read_raw()
283 return -EINVAL; in stx104_write_raw()
286 return regmap_write(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, gain); in stx104_write_raw()
288 if (!chan->output) in stx104_write_raw()
289 return -EINVAL; in stx104_write_raw()
292 return -EINVAL; in stx104_write_raw()
294 return regmap_write(priv->aio_data_map, STX104_DAC_OFFSET(chan->channel), val); in stx104_write_raw()
297 return -EINVAL; in stx104_write_raw()
305 /* single-ended input channels configuration */
315 /* differential input channels configuration */
329 offset -= 4; in stx104_reg_mask_xlate()
347 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CONTROL, STX104_SOFTWARE_TRIGGER); in stx104_init_hw()
352 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, STX104_GAIN_X1); in stx104_init_hw()
357 err = regmap_write(priv->aio_data_map, STX104_DAC_BASE, 0); in stx104_init_hw()
360 err = regmap_write(priv->aio_data_map, STX104_DAC_BASE + STX104_AIO_DATA_STRIDE, 0); in stx104_init_hw()
381 return -ENOMEM; in stx104_probe()
385 dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n", in stx104_probe()
387 return -EBUSY; in stx104_probe()
392 return -ENOMEM; in stx104_probe()
410 priv->aio_ctl_map = aio_ctl_map; in stx104_probe()
411 priv->aio_data_map = aio_data_map; in stx104_probe()
413 indio_dev->info = &stx104_info; in stx104_probe()
414 indio_dev->modes = INDIO_DIRECT_MODE; in stx104_probe()
421 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_diff); in stx104_probe()
422 indio_dev->channels = stx104_channels_diff; in stx104_probe()
424 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_sing); in stx104_probe()
425 indio_dev->channels = stx104_channels_sing; in stx104_probe()
428 indio_dev->name = dev_name(dev); in stx104_probe()
430 mutex_init(&priv->lock); in stx104_probe()