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;
184 shift = 32 - (8 * len);
185 st->data.d8[0] = AD7768_RD_FLAG_MSK(addr);
187 ret = spi_write_then_read(st->spi, st->data.d8, 1,
188 &st->data.d32, len);
192 return (be32_to_cpu(st->data.d32) >> shift);
199 st->data.d8[0] = AD7768_WR_FLAG_MSK(addr);
200 st->data.d8[1] = val & 0xFF;
202 return spi_write(st->spi, st->data.d8, 2);
225 reinit_completion(&st->completion);
231 ret = wait_for_completion_timeout(&st->completion,
234 return -ETIMEDOUT;
240 * Any SPI configuration of the AD7768-1 can only be
259 return -EBUSY;
291 /* A sync-in pulse is required every time the filter dec rate changes */
292 gpiod_set_value(st->gpio_sync_in, 1);
293 gpiod_set_value(st->gpio_sync_in, 0);
307 res = DIV_ROUND_CLOSEST(st->mclk_freq, freq);
311 diff_new = abs(res - ad7768_clk_config[i].clk_div);
332 st->samp_freq = DIV_ROUND_CLOSEST(st->mclk_freq,
348 freq = DIV_ROUND_CLOSEST(st->mclk_freq,
350 len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq);
353 buf[len - 1] = '\n';
370 return -EBUSY;
377 *val = sign_extend32(ret, chan->scan_type.realbits - 1);
382 scale_uv = regulator_get_voltage(st->vref);
387 *val2 = chan->scan_type.realbits;
392 *val = st->samp_freq;
397 return -EINVAL;
410 return -EINVAL;
419 return sprintf(label, "%s\n", st->labels[chan->channel]);
457 st->gpio_sync_in = devm_gpiod_get(&st->spi->dev, "adi,sync-in",
459 if (IS_ERR(st->gpio_sync_in))
460 return PTR_ERR(st->gpio_sync_in);
466 static irqreturn_t ad7768_trigger_handler(int irq, void *p)
468 struct iio_poll_func *pf = p;
469 struct iio_dev *indio_dev = pf->indio_dev;
473 ret = spi_read(st->spi, &st->data.scan.chan, 3);
477 iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan,
481 iio_trigger_notify_done(indio_dev->trig);
492 iio_trigger_poll(st->trig);
494 complete(&st->completion);
506 * initial 8-bit write to query the ADC_DATA register.
535 regulator_disable(st->vref);
542 struct device *device = indio_dev->dev.parent;
556 st->labels[crt_ch] = label;
568 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
570 return -ENOMEM;
581 if (spi->controller->mode_bits & SPI_MOSI_IDLE_HIGH) {
582 spi->mode |= SPI_MOSI_IDLE_HIGH;
588 st->spi = spi;
590 st->vref = devm_regulator_get(&spi->dev, "vref");
591 if (IS_ERR(st->vref))
592 return PTR_ERR(st->vref);
594 ret = regulator_enable(st->vref);
596 dev_err(&spi->dev, "Failed to enable specified vref supply\n");
600 ret = devm_add_action_or_reset(&spi->dev, ad7768_regulator_disable, st);
604 st->mclk = devm_clk_get_enabled(&spi->dev, "mclk");
605 if (IS_ERR(st->mclk))
606 return PTR_ERR(st->mclk);
608 st->mclk_freq = clk_get_rate(st->mclk);
610 indio_dev->channels = ad7768_channels;
611 indio_dev->num_channels = ARRAY_SIZE(ad7768_channels);
612 indio_dev->name = spi_get_device_id(spi)->name;
613 indio_dev->info = &ad7768_info;
614 indio_dev->modes = INDIO_DIRECT_MODE;
618 dev_err(&spi->dev, "AD7768 setup failed\n");
622 st->trig = devm_iio_trigger_alloc(&spi->dev, "%s-dev%d",
623 indio_dev->name,
625 if (!st->trig)
626 return -ENOMEM;
628 st->trig->ops = &ad7768_trigger_ops;
629 iio_trigger_set_drvdata(st->trig, indio_dev);
630 ret = devm_iio_trigger_register(&spi->dev, st->trig);
634 indio_dev->trig = iio_trigger_get(st->trig);
636 init_completion(&st->completion);
642 ret = devm_request_irq(&spi->dev, spi->irq,
645 indio_dev->name, indio_dev);
649 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev,
656 return devm_iio_device_register(&spi->dev, indio_dev);
660 { "ad7768-1", 0 },
666 { .compatible = "adi,ad7768-1" },
673 .name = "ad7768-1",
682 MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");