Lines Matching refs:adc

185 static int ad7944_3wire_cs_mode_init_msg(struct device *dev, struct ad7944_adc *adc,
188 unsigned int t_conv_ns = adc->always_turbo ? adc->timing_spec->turbo_conv_ns
189 : adc->timing_spec->conv_ns;
190 struct spi_transfer *xfers = adc->xfers;
208 xfers[2].rx_buf = &adc->sample.raw;
212 spi_message_init_with_transfers(&adc->msg, xfers, 3);
214 return devm_spi_optimize_message(dev, adc->spi, &adc->msg);
217 static int ad7944_4wire_mode_init_msg(struct device *dev, struct ad7944_adc *adc,
220 unsigned int t_conv_ns = adc->always_turbo ? adc->timing_spec->turbo_conv_ns
221 : adc->timing_spec->conv_ns;
222 struct spi_transfer *xfers = adc->xfers;
232 xfers[1].rx_buf = &adc->sample.raw;
236 spi_message_init_with_transfers(&adc->msg, xfers, 2);
238 return devm_spi_optimize_message(dev, adc->spi, &adc->msg);
241 static int ad7944_chain_mode_init_msg(struct device *dev, struct ad7944_adc *adc,
245 struct spi_transfer *xfers = adc->xfers;
251 if (adc->spi->mode & SPI_CPOL)
259 if (!(adc->spi->mode & SPI_CS_HIGH))
264 xfers[0].delay.value = adc->timing_spec->conv_ns;
267 xfers[1].rx_buf = adc->chain_mode_buf;
271 spi_message_init_with_transfers(&adc->msg, xfers, 2);
273 return devm_spi_optimize_message(dev, adc->spi, &adc->msg);
284 struct ad7944_adc *adc,
287 struct spi_transfer *xfers = adc->offload_xfers;
306 spi_message_init_with_transfers(&adc->offload_msg, xfers,
307 ARRAY_SIZE(adc->offload_xfers));
309 adc->offload_msg.offload = adc->offload;
311 ret = devm_spi_optimize_message(dev, adc->spi, &adc->offload_msg);
320 * @adc: The ADC device structure
324 * pre-optimized adc->msg.
326 * Upon successful return adc->sample.raw will contain the conversion result
327 * (or adc->chain_mode_buf if the device is using chain mode).
329 static int ad7944_convert_and_acquire(struct ad7944_adc *adc)
335 * and acquisition process. In other modes adc->cnv is NULL and is
338 gpiod_set_value_cansleep(adc->cnv, 1);
339 ret = spi_sync(adc->spi, &adc->msg);
340 gpiod_set_value_cansleep(adc->cnv, 0);
345 static int ad7944_single_conversion(struct ad7944_adc *adc,
351 ret = ad7944_convert_and_acquire(adc);
355 if (adc->spi_mode == AD7944_SPI_MODE_CHAIN) {
357 *val = ((u32 *)adc->chain_mode_buf)[chan->scan_index];
359 *val = ((u16 *)adc->chain_mode_buf)[chan->scan_index];
362 *val = adc->sample.raw.u32;
364 *val = adc->sample.raw.u16;
380 struct ad7944_adc *adc = iio_priv(indio_dev);
384 *vals = adc->sample_freq_range;
396 struct ad7944_adc *adc = iio_priv(indio_dev);
404 ret = ad7944_single_conversion(adc, chan, val);
411 *val = adc->ref_mv;
424 *val = adc->offload_trigger_hz;
432 static int ad7944_set_sample_freq(struct ad7944_adc *adc, int val)
442 ret = spi_offload_trigger_validate(adc->offload_trigger, &config);
446 adc->offload_trigger_hz = config.periodic.frequency_hz;
455 struct ad7944_adc *adc = iio_priv(indio_dev);
459 if (val < 1 || val > adc->sample_freq_range[2])
462 return ad7944_set_sample_freq(adc, val);
489 struct ad7944_adc *adc = iio_priv(indio_dev);
493 .frequency_hz = adc->offload_trigger_hz,
498 gpiod_set_value_cansleep(adc->turbo, 1);
500 ret = spi_offload_trigger_enable(adc->offload, adc->offload_trigger,
503 gpiod_set_value_cansleep(adc->turbo, 0);
510 struct ad7944_adc *adc = iio_priv(indio_dev);
512 spi_offload_trigger_disable(adc->offload, adc->offload_trigger);
513 gpiod_set_value_cansleep(adc->turbo, 0);
527 struct ad7944_adc *adc = iio_priv(indio_dev);
530 ret = ad7944_convert_and_acquire(adc);
534 if (adc->spi_mode == AD7944_SPI_MODE_CHAIN)
535 iio_push_to_buffers_with_timestamp(indio_dev, adc->chain_mode_buf,
538 iio_push_to_buffers_with_timestamp(indio_dev, &adc->sample.raw,
644 struct ad7944_adc *adc;
651 indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
655 adc = iio_priv(indio_dev);
656 adc->spi = spi;
662 adc->timing_spec = chip_info->timing_spec;
664 adc->sample_freq_range[0] = 1; /* min */
665 adc->sample_freq_range[1] = 1; /* step */
666 adc->sample_freq_range[2] = chip_info->max_sample_rate_hz; /* max */
673 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
678 adc->spi_mode = ret;
720 adc->ref_mv = ref_mv ?: AD7944_INTERNAL_REF_MV;
722 adc->cnv = devm_gpiod_get_optional(dev, "cnv", GPIOD_OUT_LOW);
723 if (IS_ERR(adc->cnv))
724 return dev_err_probe(dev, PTR_ERR(adc->cnv),
727 if (!adc->cnv && adc->spi_mode == AD7944_SPI_MODE_DEFAULT)
729 if (adc->cnv && adc->spi_mode != AD7944_SPI_MODE_DEFAULT)
733 adc->turbo = devm_gpiod_get_optional(dev, "turbo", GPIOD_OUT_LOW);
734 if (IS_ERR(adc->turbo))
735 return dev_err_probe(dev, PTR_ERR(adc->turbo),
738 adc->always_turbo = device_property_present(dev, "adi,always-turbo");
740 if (adc->turbo && adc->always_turbo)
744 if (adc->spi_mode == AD7944_SPI_MODE_CHAIN && adc->always_turbo)
748 switch (adc->spi_mode) {
750 ret = ad7944_4wire_mode_init_msg(dev, adc, &chip_info->channels[0]);
756 ret = ad7944_3wire_cs_mode_init_msg(dev, adc, &chip_info->channels[0]);
770 &adc->chain_mode_buf,
775 ret = ad7944_chain_mode_init_msg(dev, adc, &chain_chan[0],
787 adc->offload = devm_spi_offload_get(dev, spi, &ad7944_offload_config);
788 ret = PTR_ERR_OR_ZERO(adc->offload);
794 if (adc->spi_mode == AD7944_SPI_MODE_CHAIN) {
812 if (adc->spi_mode != AD7944_SPI_MODE_SINGLE)
820 adc->offload_trigger = devm_spi_offload_trigger_get(dev,
821 adc->offload, SPI_OFFLOAD_TRIGGER_PERIODIC);
822 if (IS_ERR(adc->offload_trigger))
823 return dev_err_probe(dev, PTR_ERR(adc->offload_trigger),
826 ret = ad7944_set_sample_freq(adc, 2 * MEGA);
832 adc->offload);
850 ret = ad7944_3wire_cs_mode_init_offload_msg(dev, adc,