Lines Matching +full:adc +full:- +full:use +full:- +full:res
1 // SPDX-License-Identifier: GPL-2.0
3 * Texas Instruments LMP92064 SPI ADC driver
7 * Based on linux/drivers/iio/adc/ti-tsc2046.c
46 * - IN Current (INC)
47 * - IN Voltage (INV)
126 static int lmp92064_read_meas(struct lmp92064_adc_priv *priv, u16 *res) in lmp92064_read_meas() argument
132 * The ADC only latches in new samples if all DATA registers are read in lmp92064_read_meas()
134 * The ADC auto-decrements the register index with each clocked byte. in lmp92064_read_meas()
140 ret = regmap_bulk_read(priv->regmap, TI_LMP92064_REG_DATA_COUT_MSB, in lmp92064_read_meas()
144 dev_err(&priv->spi->dev, "regmap_bulk_read failed: %pe\n", in lmp92064_read_meas()
149 res[0] = be16_to_cpu(raw[0]); in lmp92064_read_meas()
150 res[1] = be16_to_cpu(raw[1]); in lmp92064_read_meas()
169 *val = (chan->address == TI_LMP92064_CHAN_INC) ? raw[0] : raw[1]; in lmp92064_read_raw()
173 if (chan->address == TI_LMP92064_CHAN_INC) { in lmp92064_read_raw()
180 *val2 = priv->shunt_resistor_uohm; in lmp92064_read_raw()
191 return -EINVAL; in lmp92064_read_raw()
198 struct iio_dev *indio_dev = pf->indio_dev; in lmp92064_trigger_handler()
216 iio_trigger_notify_done(indio_dev->trig); in lmp92064_trigger_handler()
232 * Use more conservative pulse lengths to allow analog RC filtering of the in lmp92064_reset()
241 * Perform a soft-reset if not. in lmp92064_reset()
245 ret = regmap_write(priv->regmap, TI_LMP92064_REG_CONFIG_A, in lmp92064_reset()
250 ret = regmap_write(priv->regmap, TI_LMP92064_REG_CONFIG_B, in lmp92064_reset()
260 * not more than 3-4 iterations of this loop. in lmp92064_reset()
263 ret = regmap_read(priv->regmap, TI_LMP92064_REG_STATUS, &status); in lmp92064_reset()
277 return -ENXIO; in lmp92064_reset()
286 struct device *dev = &spi->dev; in lmp92064_adc_probe()
305 return -ENOMEM; in lmp92064_adc_probe()
309 priv->spi = spi; in lmp92064_adc_probe()
310 priv->regmap = regmap; in lmp92064_adc_probe()
312 ret = device_property_read_u32(dev, "shunt-resistor-micro-ohms", in lmp92064_adc_probe()
316 "Failed to get shunt-resistor value\n"); in lmp92064_adc_probe()
324 return -EINVAL; in lmp92064_adc_probe()
327 priv->shunt_resistor_uohm = shunt_resistor_uohm; in lmp92064_adc_probe()
346 indio_dev->name = "lmp92064"; in lmp92064_adc_probe()
347 indio_dev->modes = INDIO_DIRECT_MODE; in lmp92064_adc_probe()
348 indio_dev->channels = lmp92064_adc_channels; in lmp92064_adc_probe()
349 indio_dev->num_channels = ARRAY_SIZE(lmp92064_adc_channels); in lmp92064_adc_probe()
350 indio_dev->info = &lmp92064_adc_info; in lmp92064_adc_probe()
351 indio_dev->available_scan_masks = lmp92064_scan_masks; in lmp92064_adc_probe()
384 MODULE_DESCRIPTION("TI LMP92064 ADC");