Lines Matching +full:adc +full:- +full:chan
1 // SPDX-License-Identifier: GPL-2.0-only
23 #define STX104_OUT_CHAN(chan) { \ argument
25 .channel = chan, \
30 #define STX104_IN_CHAN(chan, diff) { \ argument
32 .channel = chan, \
33 .channel2 = chan, \
64 /* ADC Channel */
70 /* ADC Status */
75 /* ADC Control */
79 /* ADC Configuration */
90 * struct stx104_iio - IIO device private data structure
201 struct iio_chan_spec const *chan, int *val, int *val2, long mask) in stx104_read_raw() argument
211 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
218 if (chan->output) { in stx104_read_raw()
219 err = regmap_read(priv->aio_data_map, STX104_DAC_OFFSET(chan->channel), in stx104_read_raw()
227 mutex_lock(&priv->lock); in stx104_read_raw()
229 /* select ADC channel */ in stx104_read_raw()
230 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CHANNEL, in stx104_read_raw()
231 STX104_SINGLE_CHANNEL(chan->channel)); in stx104_read_raw()
233 mutex_unlock(&priv->lock); in stx104_read_raw()
238 * Trigger ADC sample capture by writing to the 8-bit Software Strobe Register and in stx104_read_raw()
245 err = regmap_write(priv->aio_ctl_map, STX104_SOFTWARE_STROBE, 0); in stx104_read_raw()
247 mutex_unlock(&priv->lock); in stx104_read_raw()
250 err = regmap_read_poll_timeout(priv->aio_ctl_map, STX104_ADC_STATUS, adc_status, in stx104_read_raw()
253 mutex_unlock(&priv->lock); in stx104_read_raw()
257 err = regmap_read(priv->aio_data_map, STX104_ADC_DATA, &value); in stx104_read_raw()
259 mutex_unlock(&priv->lock); in stx104_read_raw()
264 mutex_unlock(&priv->lock); in stx104_read_raw()
267 /* get ADC bipolar/unipolar configuration */ in stx104_read_raw()
268 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
272 *val = (u8_get_bits(adc_config, STX104_ADBU) == STX104_BIPOLAR) ? -32768 : 0; in stx104_read_raw()
275 /* get ADC bipolar/unipolar and gain configuration */ in stx104_read_raw()
276 err = regmap_read(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, &adc_config); in stx104_read_raw()
286 return -EINVAL; in stx104_read_raw()
290 struct iio_chan_spec const *chan, int val, int val2, long mask) in stx104_write_raw() argument
312 return -EINVAL; in stx104_write_raw()
315 return regmap_write(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, gain); in stx104_write_raw()
317 if (!chan->output) in stx104_write_raw()
318 return -EINVAL; in stx104_write_raw()
321 return -EINVAL; in stx104_write_raw()
323 return regmap_write(priv->aio_data_map, STX104_DAC_OFFSET(chan->channel), val); in stx104_write_raw()
326 return -EINVAL; in stx104_write_raw()
334 /* single-ended input channels configuration */
358 offset -= 4; in stx104_reg_mask_xlate()
391 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CONTROL, STX104_SOFTWARE_TRIGGER); in stx104_init_hw()
396 err = regmap_write(priv->aio_ctl_map, STX104_ADC_CONFIGURATION, STX104_GAIN_X1); in stx104_init_hw()
401 err = regmap_write(priv->aio_data_map, STX104_DAC_BASE, 0); in stx104_init_hw()
404 err = regmap_write(priv->aio_data_map, STX104_DAC_BASE + STX104_AIO_DATA_STRIDE, 0); in stx104_init_hw()
408 return bank_select_i8254(priv->aio_ctl_map); in stx104_init_hw()
426 return -ENOMEM; in stx104_probe()
430 dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n", in stx104_probe()
432 return -EBUSY; in stx104_probe()
437 return -ENOMEM; in stx104_probe()
460 priv->aio_ctl_map = aio_ctl_map; in stx104_probe()
461 priv->aio_data_map = aio_data_map; in stx104_probe()
463 indio_dev->info = &stx104_info; in stx104_probe()
464 indio_dev->modes = INDIO_DIRECT_MODE; in stx104_probe()
471 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_diff); in stx104_probe()
472 indio_dev->channels = stx104_channels_diff; in stx104_probe()
474 indio_dev->num_channels = ARRAY_SIZE(stx104_channels_sing); in stx104_probe()
475 indio_dev->channels = stx104_channels_sing; in stx104_probe()
478 indio_dev->name = dev_name(dev); in stx104_probe()
480 mutex_init(&priv->lock); in stx104_probe()