Lines Matching refs:ad7949_adc
60 static int ad7949_spi_write_cfg(struct ad7949_adc_chip *ad7949_adc, u16 val, in ad7949_spi_write_cfg() argument
64 int bits_per_word = ad7949_adc->resolution; in ad7949_spi_write_cfg()
69 .tx_buf = &ad7949_adc->buffer, in ad7949_spi_write_cfg()
75 ad7949_adc->cfg = (val & mask) | (ad7949_adc->cfg & ~mask); in ad7949_spi_write_cfg()
76 ad7949_adc->buffer = ad7949_adc->cfg << shift; in ad7949_spi_write_cfg()
78 ret = spi_sync(ad7949_adc->spi, &msg); in ad7949_spi_write_cfg()
88 static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val, in ad7949_spi_read_channel() argument
93 int bits_per_word = ad7949_adc->resolution; in ad7949_spi_read_channel()
94 int mask = GENMASK(ad7949_adc->resolution - 1, 0); in ad7949_spi_read_channel()
98 .rx_buf = &ad7949_adc->buffer, in ad7949_spi_read_channel()
111 ret = ad7949_spi_write_cfg(ad7949_adc, in ad7949_spi_read_channel()
116 if (channel == ad7949_adc->current_channel) in ad7949_spi_read_channel()
121 ad7949_adc->buffer = 0; in ad7949_spi_read_channel()
123 ret = spi_sync(ad7949_adc->spi, &msg); in ad7949_spi_read_channel()
133 ad7949_adc->current_channel = channel; in ad7949_spi_read_channel()
135 *val = ad7949_adc->buffer & mask; in ad7949_spi_read_channel()
163 struct ad7949_adc_chip *ad7949_adc = iio_priv(indio_dev); in ad7949_spi_read_raw() local
171 mutex_lock(&ad7949_adc->lock); in ad7949_spi_read_raw()
172 ret = ad7949_spi_read_channel(ad7949_adc, val, chan->channel); in ad7949_spi_read_raw()
173 mutex_unlock(&ad7949_adc->lock); in ad7949_spi_read_raw()
181 ret = regulator_get_voltage(ad7949_adc->vref); in ad7949_spi_read_raw()
196 struct ad7949_adc_chip *ad7949_adc = iio_priv(indio_dev); in ad7949_spi_reg_access() local
200 *readval = ad7949_adc->cfg; in ad7949_spi_reg_access()
202 ret = ad7949_spi_write_cfg(ad7949_adc, in ad7949_spi_reg_access()
213 static int ad7949_spi_init(struct ad7949_adc_chip *ad7949_adc) in ad7949_spi_init() argument
219 ad7949_adc->current_channel = 0; in ad7949_spi_init()
220 ret = ad7949_spi_write_cfg(ad7949_adc, 0x3C79, AD7949_MASK_TOTAL); in ad7949_spi_init()
226 ad7949_spi_read_channel(ad7949_adc, &val, ad7949_adc->current_channel); in ad7949_spi_init()
227 ad7949_spi_read_channel(ad7949_adc, &val, ad7949_adc->current_channel); in ad7949_spi_init()
236 struct ad7949_adc_chip *ad7949_adc; in ad7949_spi_probe() local
240 indio_dev = devm_iio_device_alloc(dev, sizeof(*ad7949_adc)); in ad7949_spi_probe()
252 ad7949_adc = iio_priv(indio_dev); in ad7949_spi_probe()
253 ad7949_adc->indio_dev = indio_dev; in ad7949_spi_probe()
254 ad7949_adc->spi = spi; in ad7949_spi_probe()
258 ad7949_adc->resolution = spec->resolution; in ad7949_spi_probe()
260 ad7949_adc->vref = devm_regulator_get(dev, "vref"); in ad7949_spi_probe()
261 if (IS_ERR(ad7949_adc->vref)) { in ad7949_spi_probe()
263 return PTR_ERR(ad7949_adc->vref); in ad7949_spi_probe()
266 ret = regulator_enable(ad7949_adc->vref); in ad7949_spi_probe()
272 mutex_init(&ad7949_adc->lock); in ad7949_spi_probe()
274 ret = ad7949_spi_init(ad7949_adc); in ad7949_spi_probe()
289 mutex_destroy(&ad7949_adc->lock); in ad7949_spi_probe()
290 regulator_disable(ad7949_adc->vref); in ad7949_spi_probe()
298 struct ad7949_adc_chip *ad7949_adc = iio_priv(indio_dev); in ad7949_spi_remove() local
301 mutex_destroy(&ad7949_adc->lock); in ad7949_spi_remove()
302 regulator_disable(ad7949_adc->vref); in ad7949_spi_remove()