Lines Matching +full:vref +full:- +full:p +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0
3 * Analog Devices AD7768-1 SPI ADC driver
156 struct regulator *vref; member
184 shift = 32 - (8 * len); in ad7768_spi_reg_read()
185 st->data.d8[0] = AD7768_RD_FLAG_MSK(addr); in ad7768_spi_reg_read()
187 ret = spi_write_then_read(st->spi, st->data.d8, 1, in ad7768_spi_reg_read()
188 &st->data.d32, len); in ad7768_spi_reg_read()
192 return (be32_to_cpu(st->data.d32) >> shift); in ad7768_spi_reg_read()
199 st->data.d8[0] = AD7768_WR_FLAG_MSK(addr); in ad7768_spi_reg_write()
200 st->data.d8[1] = val & 0xFF; in ad7768_spi_reg_write()
202 return spi_write(st->spi, st->data.d8, 2); in ad7768_spi_reg_write()
225 reinit_completion(&st->completion); in ad7768_scan_direct()
231 ret = wait_for_completion_timeout(&st->completion, in ad7768_scan_direct()
234 return -ETIMEDOUT; in ad7768_scan_direct()
240 * Any SPI configuration of the AD7768-1 can only be in ad7768_scan_direct()
258 mutex_lock(&st->lock); in ad7768_reg_access()
269 mutex_unlock(&st->lock); in ad7768_reg_access()
289 /* A sync-in pulse is required every time the filter dec rate changes */ in ad7768_set_dig_fil()
290 gpiod_set_value(st->gpio_sync_in, 1); in ad7768_set_dig_fil()
291 gpiod_set_value(st->gpio_sync_in, 0); in ad7768_set_dig_fil()
305 res = DIV_ROUND_CLOSEST(st->mclk_freq, freq); in ad7768_set_freq()
309 diff_new = abs(res - ad7768_clk_config[i].clk_div); in ad7768_set_freq()
330 st->samp_freq = DIV_ROUND_CLOSEST(st->mclk_freq, in ad7768_set_freq()
346 freq = DIV_ROUND_CLOSEST(st->mclk_freq, in ad7768_sampling_freq_avail()
348 len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq); in ad7768_sampling_freq_avail()
351 buf[len - 1] = '\n'; in ad7768_sampling_freq_avail()
382 scale_uv = regulator_get_voltage(st->vref); in ad7768_read_raw()
387 *val2 = chan->scan_type.realbits; in ad7768_read_raw()
392 *val = st->samp_freq; in ad7768_read_raw()
397 return -EINVAL; in ad7768_read_raw()
410 return -EINVAL; in ad7768_write_raw()
448 st->gpio_sync_in = devm_gpiod_get(&st->spi->dev, "adi,sync-in", in ad7768_setup()
450 if (IS_ERR(st->gpio_sync_in)) in ad7768_setup()
451 return PTR_ERR(st->gpio_sync_in); in ad7768_setup()
457 static irqreturn_t ad7768_trigger_handler(int irq, void *p) in ad7768_trigger_handler() argument
459 struct iio_poll_func *pf = p; in ad7768_trigger_handler()
460 struct iio_dev *indio_dev = pf->indio_dev; in ad7768_trigger_handler()
464 mutex_lock(&st->lock); in ad7768_trigger_handler()
466 ret = spi_read(st->spi, &st->data.scan.chan, 3); in ad7768_trigger_handler()
470 iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan, in ad7768_trigger_handler()
474 iio_trigger_notify_done(indio_dev->trig); in ad7768_trigger_handler()
475 mutex_unlock(&st->lock); in ad7768_trigger_handler()
486 iio_trigger_poll(st->trig); in ad7768_interrupt()
488 complete(&st->completion); in ad7768_interrupt()
500 * initial 8-bit write to query the ADC_DATA register. in ad7768_buffer_postenable()
529 regulator_disable(st->vref); in ad7768_regulator_disable()
536 clk_disable_unprepare(st->mclk); in ad7768_clk_disable()
545 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad7768_probe()
547 return -ENOMEM; in ad7768_probe()
550 st->spi = spi; in ad7768_probe()
552 st->vref = devm_regulator_get(&spi->dev, "vref"); in ad7768_probe()
553 if (IS_ERR(st->vref)) in ad7768_probe()
554 return PTR_ERR(st->vref); in ad7768_probe()
556 ret = regulator_enable(st->vref); in ad7768_probe()
558 dev_err(&spi->dev, "Failed to enable specified vref supply\n"); in ad7768_probe()
562 ret = devm_add_action_or_reset(&spi->dev, ad7768_regulator_disable, st); in ad7768_probe()
566 st->mclk = devm_clk_get(&spi->dev, "mclk"); in ad7768_probe()
567 if (IS_ERR(st->mclk)) in ad7768_probe()
568 return PTR_ERR(st->mclk); in ad7768_probe()
570 ret = clk_prepare_enable(st->mclk); in ad7768_probe()
574 ret = devm_add_action_or_reset(&spi->dev, ad7768_clk_disable, st); in ad7768_probe()
578 st->mclk_freq = clk_get_rate(st->mclk); in ad7768_probe()
581 mutex_init(&st->lock); in ad7768_probe()
583 indio_dev->channels = ad7768_channels; in ad7768_probe()
584 indio_dev->num_channels = ARRAY_SIZE(ad7768_channels); in ad7768_probe()
585 indio_dev->name = spi_get_device_id(spi)->name; in ad7768_probe()
586 indio_dev->info = &ad7768_info; in ad7768_probe()
587 indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED; in ad7768_probe()
591 dev_err(&spi->dev, "AD7768 setup failed\n"); in ad7768_probe()
595 st->trig = devm_iio_trigger_alloc(&spi->dev, "%s-dev%d", in ad7768_probe()
596 indio_dev->name, indio_dev->id); in ad7768_probe()
597 if (!st->trig) in ad7768_probe()
598 return -ENOMEM; in ad7768_probe()
600 st->trig->ops = &ad7768_trigger_ops; in ad7768_probe()
601 st->trig->dev.parent = &spi->dev; in ad7768_probe()
602 iio_trigger_set_drvdata(st->trig, indio_dev); in ad7768_probe()
603 ret = devm_iio_trigger_register(&spi->dev, st->trig); in ad7768_probe()
607 indio_dev->trig = iio_trigger_get(st->trig); in ad7768_probe()
609 init_completion(&st->completion); in ad7768_probe()
611 ret = devm_request_irq(&spi->dev, spi->irq, in ad7768_probe()
614 indio_dev->name, indio_dev); in ad7768_probe()
618 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, in ad7768_probe()
625 return devm_iio_device_register(&spi->dev, indio_dev); in ad7768_probe()
629 { "ad7768-1", 0 },
635 { .compatible = "adi,ad7768-1" },
642 .name = "ad7768-1",
651 MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");