Lines Matching +full:acquisition +full:- +full:time
1 // SPDX-License-Identifier: GPL-2.0
3 * IIO driver for Texas Instruments ADS7924 ADC, 12-bit, 4-Channels, I2C
8 * based on iio/adc/ti-ads1015.c
98 * The power-up time is allowed to elapse whenever the device has been shutdown
99 * in idle mode. Power-up time can allow external circuits, such as an
101 * The nominal time programmed by the PUTIME[4:0] register bits is given by:
103 * If a power-up time is not required, set the bits to '0' to effectively bypass.
108 * Acquisition Time according to ACQTIME[4:0] register bits.
109 * The Acquisition Time is given by:
111 * Using default value of 0 for ACQTIME[4:0] results in a minimum acquisition
112 * time of 6us.
116 /* The conversion time is always 4μs and cannot be programmed by the user. */
137 /* GPIO descriptor for device hard-reset pin. */
147 * Set to true when the ADC is switched to the continuous-conversion
148 * mode and exits from a power-down state. This flag is used to avoid
198 if (chan->channel < 0 || chan->channel >= ADS7924_CHANNELS)
199 return -EINVAL;
201 if (data->conv_invalid) {
208 data->conv_invalid = false;
211 ret = regmap_raw_read(data->regmap, ADS7924_AUTO_INCREMENT_BIT |
212 chan->address, &be_val, sizeof(be_val));
230 mutex_lock(&data->lock);
232 mutex_unlock(&data->lock);
238 vref_uv = regulator_get_voltage(data->vref_reg);
246 return -EINVAL;
279 return -EINVAL;
288 struct device *dev = data->dev;
299 ret = regmap_update_bits(data->regmap, ADS7924_MODECNTRL_REG,
311 ret = regmap_update_bits(data->regmap, ADS7924_MODECNTRL_REG,
324 if (data->reset_gpio) {
325 gpiod_set_value(data->reset_gpio, 1); /* Assert. */
326 /* Educated guess: assert time not specified in datasheet... */
328 gpiod_set_value(data->reset_gpio, 0); /* Deassert. */
336 return regmap_write(data->regmap, ADS7924_RESET_REG, 0b10101010);
353 struct device *dev = &client->dev;
356 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
358 return dev_err_probe(dev, -ENOMEM,
363 data->dev = dev;
366 data->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
367 if (IS_ERR(data->reset_gpio))
368 return dev_err_probe(dev, PTR_ERR(data->reset_gpio),
371 mutex_init(&data->lock);
373 indio_dev->name = "ads7924";
374 indio_dev->modes = INDIO_DIRECT_MODE;
376 indio_dev->channels = ads7924_channels;
377 indio_dev->num_channels = ARRAY_SIZE(ads7924_channels);
378 indio_dev->info = &ads7924_info;
385 data->regmap = devm_regmap_init_i2c(client, &ads7924_regmap_config);
386 if (IS_ERR(data->regmap))
387 return dev_err_probe(dev, PTR_ERR(data->regmap),
390 data->vref_reg = devm_regulator_get(dev, "vref");
391 if (IS_ERR(data->vref_reg))
392 return dev_err_probe(dev, PTR_ERR(data->vref_reg),
395 ret = regulator_enable(data->vref_reg);
400 ret = devm_add_action_or_reset(dev, ads7924_reg_disable, data->vref_reg);
420 /* Use minimum signal acquire time. */
421 ret = regmap_update_bits(data->regmap, ADS7924_ACQCONFIG_REG,
426 "failed to configure signal acquire time\n");
428 /* Disable power-up time. */
429 ret = regmap_update_bits(data->regmap, ADS7924_PWRCONFIG_REG,
434 "failed to configure power-up time\n");
436 data->conv_invalid = true;