Lines Matching +full:adc +full:- +full:dev
2 * ADC12130/ADC12132/ADC12138 12-bit plus sign ADC driver
54 * Maximum size needed: 16x 2 bytes ADC data + 8 bytes timestamp.
130 static int adc12138_mode_programming(struct adc12138 *adc, u8 mode, in adc12138_mode_programming() argument
134 .tx_buf = adc->tx_buf, in adc12138_mode_programming()
135 .rx_buf = adc->rx_buf, in adc12138_mode_programming()
141 if (adc->id != adc12138) in adc12138_mode_programming()
144 adc->tx_buf[0] = mode; in adc12138_mode_programming()
146 ret = spi_sync_transfer(adc->spi, &xfer, 1); in adc12138_mode_programming()
150 memcpy(rx_buf, adc->rx_buf, len); in adc12138_mode_programming()
155 static int adc12138_read_status(struct adc12138 *adc) in adc12138_read_status() argument
160 ret = adc12138_mode_programming(adc, ADC12138_MODE_READ_STATUS, in adc12138_read_status()
168 static int __adc12138_start_conv(struct adc12138 *adc, in __adc12138_start_conv() argument
174 u8 mode = (ch_to_mux[channel->channel] << 4) | in __adc12138_start_conv()
175 (channel->differential ? 0 : 0x80); in __adc12138_start_conv()
177 return adc12138_mode_programming(adc, mode, data, len); in __adc12138_start_conv()
180 static int adc12138_start_conv(struct adc12138 *adc, in adc12138_start_conv() argument
185 return __adc12138_start_conv(adc, channel, &trash, 1); in adc12138_start_conv()
188 static int adc12138_start_and_read_conv(struct adc12138 *adc, in adc12138_start_and_read_conv() argument
192 return __adc12138_start_conv(adc, channel, data, 2); in adc12138_start_and_read_conv()
195 static int adc12138_read_conv_data(struct adc12138 *adc, __be16 *value) in adc12138_read_conv_data() argument
198 return adc12138_mode_programming(adc, ADC12138_MODE_READ_STATUS, in adc12138_read_conv_data()
202 static int adc12138_wait_eoc(struct adc12138 *adc, unsigned long timeout) in adc12138_wait_eoc() argument
204 if (!wait_for_completion_timeout(&adc->complete, timeout)) in adc12138_wait_eoc()
205 return -ETIMEDOUT; in adc12138_wait_eoc()
210 static int adc12138_adc_conversion(struct adc12138 *adc, in adc12138_adc_conversion() argument
216 reinit_completion(&adc->complete); in adc12138_adc_conversion()
218 ret = adc12138_start_conv(adc, channel); in adc12138_adc_conversion()
222 ret = adc12138_wait_eoc(adc, msecs_to_jiffies(100)); in adc12138_adc_conversion()
226 return adc12138_read_conv_data(adc, value); in adc12138_adc_conversion()
233 struct adc12138 *adc = iio_priv(iio); in adc12138_read_raw() local
239 mutex_lock(&adc->lock); in adc12138_read_raw()
240 ret = adc12138_adc_conversion(adc, channel, &data); in adc12138_read_raw()
241 mutex_unlock(&adc->lock); in adc12138_read_raw()
249 ret = regulator_get_voltage(adc->vref_p); in adc12138_read_raw()
254 if (!IS_ERR(adc->vref_n)) { in adc12138_read_raw()
255 ret = regulator_get_voltage(adc->vref_n); in adc12138_read_raw()
258 *value -= ret; in adc12138_read_raw()
263 *shift = channel->scan_type.realbits - 1; in adc12138_read_raw()
267 if (!IS_ERR(adc->vref_n)) { in adc12138_read_raw()
268 *value = regulator_get_voltage(adc->vref_n); in adc12138_read_raw()
281 return -EINVAL; in adc12138_read_raw()
288 static int adc12138_init(struct adc12138 *adc) in adc12138_init() argument
295 reinit_completion(&adc->complete); in adc12138_init()
297 ret = adc12138_mode_programming(adc, ADC12138_MODE_AUTO_CAL, &trash, 1); in adc12138_init()
302 status = adc12138_read_status(adc); in adc12138_init()
306 adc12138_wait_eoc(adc, msecs_to_jiffies(100)); in adc12138_init()
308 status = adc12138_read_status(adc); in adc12138_init()
310 dev_warn(&adc->spi->dev, in adc12138_init()
313 return -EIO; in adc12138_init()
316 switch (adc->acquisition_time) { in adc12138_init()
330 return -EINVAL; in adc12138_init()
333 return adc12138_mode_programming(adc, mode, &trash, 1); in adc12138_init()
339 struct iio_dev *indio_dev = pf->indio_dev; in adc12138_trigger_handler()
340 struct adc12138 *adc = iio_priv(indio_dev); in adc12138_trigger_handler() local
346 mutex_lock(&adc->lock); in adc12138_trigger_handler()
348 for_each_set_bit(scan_index, indio_dev->active_scan_mask, in adc12138_trigger_handler()
349 indio_dev->masklength) { in adc12138_trigger_handler()
351 &indio_dev->channels[scan_index]; in adc12138_trigger_handler()
353 reinit_completion(&adc->complete); in adc12138_trigger_handler()
355 ret = adc12138_start_and_read_conv(adc, scan_chan, in adc12138_trigger_handler()
356 i ? &adc->data[i - 1] : &trash); in adc12138_trigger_handler()
358 dev_warn(&adc->spi->dev, in adc12138_trigger_handler()
363 ret = adc12138_wait_eoc(adc, msecs_to_jiffies(100)); in adc12138_trigger_handler()
365 dev_warn(&adc->spi->dev, "wait eoc timeout\n"); in adc12138_trigger_handler()
373 ret = adc12138_read_conv_data(adc, &adc->data[i - 1]); in adc12138_trigger_handler()
375 dev_warn(&adc->spi->dev, in adc12138_trigger_handler()
381 iio_push_to_buffers_with_timestamp(indio_dev, adc->data, in adc12138_trigger_handler()
384 mutex_unlock(&adc->lock); in adc12138_trigger_handler()
386 iio_trigger_notify_done(indio_dev->trig); in adc12138_trigger_handler()
394 struct adc12138 *adc = iio_priv(indio_dev); in adc12138_eoc_handler() local
396 complete(&adc->complete); in adc12138_eoc_handler()
404 struct adc12138 *adc; in adc12138_probe() local
407 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc)); in adc12138_probe()
409 return -ENOMEM; in adc12138_probe()
411 adc = iio_priv(indio_dev); in adc12138_probe()
412 adc->spi = spi; in adc12138_probe()
413 adc->id = spi_get_device_id(spi)->driver_data; in adc12138_probe()
414 mutex_init(&adc->lock); in adc12138_probe()
415 init_completion(&adc->complete); in adc12138_probe()
417 indio_dev->name = spi_get_device_id(spi)->name; in adc12138_probe()
418 indio_dev->dev.parent = &spi->dev; in adc12138_probe()
419 indio_dev->info = &adc12138_info; in adc12138_probe()
420 indio_dev->modes = INDIO_DIRECT_MODE; in adc12138_probe()
422 switch (adc->id) { in adc12138_probe()
425 indio_dev->channels = adc12132_channels; in adc12138_probe()
426 indio_dev->num_channels = ARRAY_SIZE(adc12132_channels); in adc12138_probe()
429 indio_dev->channels = adc12138_channels; in adc12138_probe()
430 indio_dev->num_channels = ARRAY_SIZE(adc12138_channels); in adc12138_probe()
433 return -EINVAL; in adc12138_probe()
436 ret = of_property_read_u32(spi->dev.of_node, "ti,acquisition-time", in adc12138_probe()
437 &adc->acquisition_time); in adc12138_probe()
439 adc->acquisition_time = 10; in adc12138_probe()
441 adc->cclk = devm_clk_get(&spi->dev, NULL); in adc12138_probe()
442 if (IS_ERR(adc->cclk)) in adc12138_probe()
443 return PTR_ERR(adc->cclk); in adc12138_probe()
445 adc->vref_p = devm_regulator_get(&spi->dev, "vref-p"); in adc12138_probe()
446 if (IS_ERR(adc->vref_p)) in adc12138_probe()
447 return PTR_ERR(adc->vref_p); in adc12138_probe()
449 adc->vref_n = devm_regulator_get_optional(&spi->dev, "vref-n"); in adc12138_probe()
450 if (IS_ERR(adc->vref_n)) { in adc12138_probe()
455 ret = PTR_ERR(adc->vref_n); in adc12138_probe()
456 if (ret != -ENODEV) in adc12138_probe()
460 ret = devm_request_irq(&spi->dev, spi->irq, adc12138_eoc_handler, in adc12138_probe()
461 IRQF_TRIGGER_RISING, indio_dev->name, indio_dev); in adc12138_probe()
465 ret = clk_prepare_enable(adc->cclk); in adc12138_probe()
469 ret = regulator_enable(adc->vref_p); in adc12138_probe()
473 if (!IS_ERR(adc->vref_n)) { in adc12138_probe()
474 ret = regulator_enable(adc->vref_n); in adc12138_probe()
479 ret = adc12138_init(adc); in adc12138_probe()
498 if (!IS_ERR(adc->vref_n)) in adc12138_probe()
499 regulator_disable(adc->vref_n); in adc12138_probe()
501 regulator_disable(adc->vref_p); in adc12138_probe()
503 clk_disable_unprepare(adc->cclk); in adc12138_probe()
511 struct adc12138 *adc = iio_priv(indio_dev); in adc12138_remove() local
515 if (!IS_ERR(adc->vref_n)) in adc12138_remove()
516 regulator_disable(adc->vref_n); in adc12138_remove()
517 regulator_disable(adc->vref_p); in adc12138_remove()
518 clk_disable_unprepare(adc->cclk); in adc12138_remove()