Lines Matching +full:range +full:- +full:microamp
1 // SPDX-License-Identifier: GPL-2.0+
121 * struct ad5770R_state - driver instance specific data
161 { 0, AD5770R_CH0_NEG_60_0, -60, 0 },
162 { 0, AD5770R_CH0_NEG_60_300, -60, 300 },
195 regval = AD5770R_RANGE_OUTPUT_SCALING(out_mode->out_scale) | in ad5770r_set_output_mode()
196 AD5770R_RANGE_MODE(out_mode->out_range_mode); in ad5770r_set_output_mode()
198 return regmap_write(st->regmap, in ad5770r_set_output_mode()
206 regval = AD5770R_REF_RESISTOR_SEL(st->external_res); in ad5770r_set_reference()
208 if (st->internal_ref) { in ad5770r_set_reference()
211 switch (st->vref) { in ad5770r_set_reference()
224 return regmap_write(st->regmap, AD5770R_REFERENCE, regval); in ad5770r_set_reference()
229 return regmap_write(st->regmap, ADI_SPI_IF_CONFIG_A, in ad5770r_soft_reset()
236 if (!st->gpio_reset) in ad5770r_reset()
239 gpiod_set_value_cansleep(st->gpio_reset, 0); in ad5770r_reset()
241 gpiod_set_value_cansleep(st->gpio_reset, 1); in ad5770r_reset()
255 out_range = st->output_mode[ch].out_range_mode; in ad5770r_get_range()
267 return -EINVAL; in ad5770r_get_range()
277 ret = regmap_read(st->regmap, in ad5770r_get_filter_freq()
278 AD5770R_FILTER_RESISTOR(chan->channel), ®val); in ad5770r_get_filter_freq()
286 return -EINVAL; in ad5770r_get_filter_freq()
304 return -EINVAL; in ad5770r_set_filter_freq()
308 return regmap_write(st->regmap, AD5770R_FILTER_RESISTOR(chan->channel), in ad5770r_set_filter_freq()
322 ret = regmap_bulk_read(st->regmap, in ad5770r_read_raw()
323 chan->address, in ad5770r_read_raw()
324 st->transf_buf, 2); in ad5770r_read_raw()
328 buf16 = st->transf_buf[0] + (st->transf_buf[1] << 8); in ad5770r_read_raw()
332 ret = ad5770r_get_range(st, chan->channel, &min, &max); in ad5770r_read_raw()
335 *val = max - min; in ad5770r_read_raw()
345 ret = ad5770r_get_range(st, chan->channel, &min, &max); in ad5770r_read_raw()
351 return -EINVAL; in ad5770r_read_raw()
363 st->transf_buf[0] = ((u16)val >> 6); in ad5770r_write_raw()
364 st->transf_buf[1] = (val & GENMASK(5, 0)) << 2; in ad5770r_write_raw()
365 return regmap_bulk_write(st->regmap, chan->address, in ad5770r_write_raw()
366 st->transf_buf, 2); in ad5770r_write_raw()
370 return -EINVAL; in ad5770r_write_raw()
387 return -EINVAL; in ad5770r_read_freq_avail()
398 return regmap_read(st->regmap, reg, readval); in ad5770r_reg_access()
400 return regmap_write(st->regmap, reg, writeval); in ad5770r_reg_access()
421 st->output_mode[index].out_range_mode = ad5770r_rng_tbl[i].mode; in ad5770r_store_output_range()
426 return -EINVAL; in ad5770r_store_output_range()
436 return sprintf(buf, "%d\n", st->ch_pwr_down[chan->channel]); in ad5770r_read_dac_powerdown()
456 regval = AD5770R_CFG_SHUTDOWN_B(readin, chan->channel); in ad5770r_write_dac_powerdown()
457 if (chan->channel == 0 && in ad5770r_write_dac_powerdown()
458 st->output_mode[0].out_range_mode > AD5770R_CH0_0_300) { in ad5770r_write_dac_powerdown()
460 mask = BIT(chan->channel) + BIT(7); in ad5770r_write_dac_powerdown()
462 mask = BIT(chan->channel); in ad5770r_write_dac_powerdown()
464 ret = regmap_update_bits(st->regmap, AD5770R_CHANNEL_CONFIG, mask, in ad5770r_write_dac_powerdown()
469 regval = AD5770R_CH_SET(readin, chan->channel); in ad5770r_write_dac_powerdown()
470 ret = regmap_update_bits(st->regmap, AD5770R_CH_ENABLE, in ad5770r_write_dac_powerdown()
471 BIT(chan->channel), regval); in ad5770r_write_dac_powerdown()
475 st->ch_pwr_down[chan->channel] = !readin; in ad5770r_write_dac_powerdown()
520 num = device_get_child_node_count(&st->spi->dev); in ad5770r_channel_config()
522 return -EINVAL; in ad5770r_channel_config()
524 device_for_each_child_node(&st->spi->dev, child) { in ad5770r_channel_config()
529 ret = -EINVAL; in ad5770r_channel_config()
534 "adi,range-microamp", in ad5770r_channel_config()
557 st->gpio_reset = devm_gpiod_get_optional(&st->spi->dev, "reset", in ad5770r_init()
559 if (IS_ERR(st->gpio_reset)) in ad5770r_init()
560 return PTR_ERR(st->gpio_reset); in ad5770r_init()
567 /* Set output range */ in ad5770r_init()
573 ret = ad5770r_set_output_mode(st, &st->output_mode[i], i); in ad5770r_init()
578 st->external_res = fwnode_property_read_bool(st->spi->dev.fwnode, in ad5770r_init()
579 "adi,external-resistor"); in ad5770r_init()
586 ret = regmap_write(st->regmap, AD5770R_CHANNEL_CONFIG, 0x00); in ad5770r_init()
590 ret = regmap_write(st->regmap, AD5770R_CH_ENABLE, 0x00); in ad5770r_init()
595 st->ch_pwr_down[i] = true; in ad5770r_init()
604 regulator_disable(st->vref_reg); in ad5770r_disable_regulator()
614 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad5770r_probe()
616 return -ENOMEM; in ad5770r_probe()
621 st->spi = spi; in ad5770r_probe()
625 dev_err(&spi->dev, "Error initializing spi regmap: %ld\n", in ad5770r_probe()
629 st->regmap = regmap; in ad5770r_probe()
631 st->vref_reg = devm_regulator_get_optional(&spi->dev, "vref"); in ad5770r_probe()
632 if (!IS_ERR(st->vref_reg)) { in ad5770r_probe()
633 ret = regulator_enable(st->vref_reg); in ad5770r_probe()
635 dev_err(&spi->dev, in ad5770r_probe()
640 ret = devm_add_action_or_reset(&spi->dev, in ad5770r_probe()
646 ret = regulator_get_voltage(st->vref_reg); in ad5770r_probe()
650 st->vref = ret / 1000; in ad5770r_probe()
652 if (PTR_ERR(st->vref_reg) == -ENODEV) { in ad5770r_probe()
653 st->vref = AD5770R_LOW_VREF_mV; in ad5770r_probe()
654 st->internal_ref = true; in ad5770r_probe()
656 return PTR_ERR(st->vref_reg); in ad5770r_probe()
660 indio_dev->name = spi_get_device_id(spi)->name; in ad5770r_probe()
661 indio_dev->info = &ad5770r_info; in ad5770r_probe()
662 indio_dev->modes = INDIO_DIRECT_MODE; in ad5770r_probe()
663 indio_dev->channels = ad5770r_channels; in ad5770r_probe()
664 indio_dev->num_channels = ARRAY_SIZE(ad5770r_channels); in ad5770r_probe()
668 dev_err(&spi->dev, "AD5770R init failed\n"); in ad5770r_probe()
672 return devm_iio_device_register(&st->spi->dev, indio_dev); in ad5770r_probe()