Lines Matching +full:vref +full:- +full:internal
1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright 2014-2019 Analog Devices Inc.
17 #include "ad7091r-base.h"
48 struct regulator *vref; member
90 return -EINVAL; in ad7091r_set_mode()
93 ret = regmap_update_bits(st->map, AD7091R_REG_CONF, in ad7091r_set_mode()
98 st->mode = mode; in ad7091r_set_mode()
109 ret = regmap_write(st->map, AD7091R_REG_CHANNEL, in ad7091r_set_channel()
118 return regmap_read(st->map, AD7091R_REG_RESULT, &dummy); in ad7091r_set_channel()
132 ret = regmap_read(st->map, AD7091R_REG_RESULT, &val); in ad7091r_read_one()
137 return -EIO; in ad7091r_read_one()
152 mutex_lock(&st->lock); in ad7091r_read_raw()
156 if (st->mode != AD7091R_MODE_COMMAND) { in ad7091r_read_raw()
157 ret = -EBUSY; in ad7091r_read_raw()
161 ret = ad7091r_read_one(iio_dev, chan->channel, &read_val); in ad7091r_read_raw()
170 if (st->vref) { in ad7091r_read_raw()
171 ret = regulator_get_voltage(st->vref); in ad7091r_read_raw()
177 *val = st->chip_info->vref_mV; in ad7091r_read_raw()
180 *val2 = chan->scan_type.realbits; in ad7091r_read_raw()
185 ret = -EINVAL; in ad7091r_read_raw()
190 mutex_unlock(&st->lock); in ad7091r_read_raw()
204 ret = regmap_read(st->map, in ad7091r_read_event_config()
205 AD7091R_REG_CH_HIGH_LIMIT(chan->channel), in ad7091r_read_event_config()
211 ret = regmap_read(st->map, in ad7091r_read_event_config()
212 AD7091R_REG_CH_LOW_LIMIT(chan->channel), in ad7091r_read_event_config()
218 return -EINVAL; in ad7091r_read_event_config()
230 return regmap_set_bits(st->map, AD7091R_REG_CONF, in ad7091r_write_event_config()
234 * Set thresholds either to 0 or to 2^12 - 1 as appropriate to in ad7091r_write_event_config()
239 return regmap_write(st->map, in ad7091r_write_event_config()
240 AD7091R_REG_CH_HIGH_LIMIT(chan->channel), in ad7091r_write_event_config()
243 return regmap_write(st->map, in ad7091r_write_event_config()
244 AD7091R_REG_CH_LOW_LIMIT(chan->channel), in ad7091r_write_event_config()
247 return -EINVAL; in ad7091r_write_event_config()
265 ret = regmap_read(st->map, in ad7091r_read_event_value()
266 AD7091R_REG_CH_HIGH_LIMIT(chan->channel), in ad7091r_read_event_value()
272 ret = regmap_read(st->map, in ad7091r_read_event_value()
273 AD7091R_REG_CH_LOW_LIMIT(chan->channel), in ad7091r_read_event_value()
279 return -EINVAL; in ad7091r_read_event_value()
282 ret = regmap_read(st->map, in ad7091r_read_event_value()
283 AD7091R_REG_CH_HYSTERESIS(chan->channel), in ad7091r_read_event_value()
289 return -EINVAL; in ad7091r_read_event_value()
305 return regmap_write(st->map, in ad7091r_write_event_value()
306 AD7091R_REG_CH_HIGH_LIMIT(chan->channel), in ad7091r_write_event_value()
309 return regmap_write(st->map, in ad7091r_write_event_value()
310 AD7091R_REG_CH_LOW_LIMIT(chan->channel), in ad7091r_write_event_value()
313 return -EINVAL; in ad7091r_write_event_value()
316 return regmap_write(st->map, in ad7091r_write_event_value()
317 AD7091R_REG_CH_HYSTERESIS(chan->channel), in ad7091r_write_event_value()
320 return -EINVAL; in ad7091r_write_event_value()
340 ret = regmap_read(st->map, AD7091R_REG_ALERT, &read_val); in ad7091r_event_handler()
344 for (i = 0; i < st->chip_info->num_channels; i++) { in ad7091r_event_handler()
364 regulator_disable(st->vref); in ad7091r_remove()
377 return -ENOMEM; in ad7091r_probe()
380 st->dev = dev; in ad7091r_probe()
381 st->chip_info = chip_info; in ad7091r_probe()
382 st->map = map; in ad7091r_probe()
384 iio_dev->name = name; in ad7091r_probe()
385 iio_dev->info = &ad7091r_info; in ad7091r_probe()
386 iio_dev->modes = INDIO_DIRECT_MODE; in ad7091r_probe()
388 iio_dev->num_channels = chip_info->num_channels; in ad7091r_probe()
389 iio_dev->channels = chip_info->channels; in ad7091r_probe()
392 ret = regmap_update_bits(st->map, AD7091R_REG_CONF, in ad7091r_probe()
404 st->vref = devm_regulator_get_optional(dev, "vref"); in ad7091r_probe()
405 if (IS_ERR(st->vref)) { in ad7091r_probe()
406 if (PTR_ERR(st->vref) == -EPROBE_DEFER) in ad7091r_probe()
407 return -EPROBE_DEFER; in ad7091r_probe()
409 st->vref = NULL; in ad7091r_probe()
410 /* Enable internal vref */ in ad7091r_probe()
411 ret = regmap_set_bits(st->map, AD7091R_REG_CONF, in ad7091r_probe()
414 return dev_err_probe(st->dev, ret, in ad7091r_probe()
415 "Error on enable internal reference\n"); in ad7091r_probe()
417 ret = regulator_enable(st->vref); in ad7091r_probe()
465 MODULE_DESCRIPTION("Analog Devices AD7091Rx multi-channel converters");