Lines Matching +full:spi +full:- +full:lsb +full:- +full:first
1 // SPDX-License-Identifier: GPL-2.0
3 * Analog Devices AD7768-1 SPI ADC driver
17 #include <linux/spi/spi.h>
155 struct spi_device *spi; member
180 shift = 32 - (8 * len); in ad7768_spi_reg_read()
181 st->data.d8[0] = AD7768_RD_FLAG_MSK(addr); in ad7768_spi_reg_read()
183 ret = spi_write_then_read(st->spi, st->data.d8, 1, in ad7768_spi_reg_read()
184 &st->data.d32, len); in ad7768_spi_reg_read()
188 return (be32_to_cpu(st->data.d32) >> shift); in ad7768_spi_reg_read()
195 st->data.d8[0] = AD7768_WR_FLAG_MSK(addr); in ad7768_spi_reg_write()
196 st->data.d8[1] = val & 0xFF; in ad7768_spi_reg_write()
198 return spi_write(st->spi, st->data.d8, 2); in ad7768_spi_reg_write()
221 reinit_completion(&st->completion); in ad7768_scan_direct()
227 ret = wait_for_completion_timeout(&st->completion, in ad7768_scan_direct()
230 return -ETIMEDOUT; in ad7768_scan_direct()
236 * Any SPI configuration of the AD7768-1 can only be in ad7768_scan_direct()
254 mutex_lock(&st->lock); in ad7768_reg_access()
265 mutex_unlock(&st->lock); in ad7768_reg_access()
285 /* A sync-in pulse is required every time the filter dec rate changes */ in ad7768_set_dig_fil()
286 gpiod_set_value(st->gpio_sync_in, 1); in ad7768_set_dig_fil()
287 gpiod_set_value(st->gpio_sync_in, 0); in ad7768_set_dig_fil()
301 res = DIV_ROUND_CLOSEST(st->mclk_freq, freq); in ad7768_set_freq()
305 diff_new = abs(res - ad7768_clk_config[i].clk_div); in ad7768_set_freq()
326 st->samp_freq = DIV_ROUND_CLOSEST(st->mclk_freq, in ad7768_set_freq()
342 freq = DIV_ROUND_CLOSEST(st->mclk_freq, in ad7768_sampling_freq_avail()
344 len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq); in ad7768_sampling_freq_avail()
347 buf[len - 1] = '\n'; in ad7768_sampling_freq_avail()
378 scale_uv = regulator_get_voltage(st->vref); in ad7768_read_raw()
383 *val2 = chan->scan_type.realbits; in ad7768_read_raw()
388 *val = st->samp_freq; in ad7768_read_raw()
393 return -EINVAL; in ad7768_read_raw()
406 return -EINVAL; in ad7768_write_raw()
432 * a software reset. The bits must first be set to 11, and then in ad7768_setup()
444 st->gpio_sync_in = devm_gpiod_get(&st->spi->dev, "adi,sync-in", in ad7768_setup()
446 if (IS_ERR(st->gpio_sync_in)) in ad7768_setup()
447 return PTR_ERR(st->gpio_sync_in); in ad7768_setup()
456 struct iio_dev *indio_dev = pf->indio_dev; in ad7768_trigger_handler()
460 mutex_lock(&st->lock); in ad7768_trigger_handler()
462 ret = spi_read(st->spi, &st->data.d32, 3); in ad7768_trigger_handler()
466 iio_push_to_buffers_with_timestamp(indio_dev, &st->data.d32, in ad7768_trigger_handler()
469 iio_trigger_notify_done(indio_dev->trig); in ad7768_trigger_handler()
471 mutex_unlock(&st->lock); in ad7768_trigger_handler()
482 iio_trigger_poll(st->trig); in ad7768_interrupt()
484 complete(&st->completion); in ad7768_interrupt()
494 * Write a 1 to the LSB of the INTERFACE_FORMAT register to enter in ad7768_buffer_postenable()
496 * initial 8-bit write to query the ADC_DATA register. in ad7768_buffer_postenable()
525 regulator_disable(st->vref); in ad7768_regulator_disable()
532 clk_disable_unprepare(st->mclk); in ad7768_clk_disable()
535 static int ad7768_probe(struct spi_device *spi) in ad7768_probe() argument
541 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in ad7768_probe()
543 return -ENOMEM; in ad7768_probe()
546 st->spi = spi; in ad7768_probe()
548 st->vref = devm_regulator_get(&spi->dev, "vref"); in ad7768_probe()
549 if (IS_ERR(st->vref)) in ad7768_probe()
550 return PTR_ERR(st->vref); in ad7768_probe()
552 ret = regulator_enable(st->vref); in ad7768_probe()
554 dev_err(&spi->dev, "Failed to enable specified vref supply\n"); in ad7768_probe()
558 ret = devm_add_action_or_reset(&spi->dev, ad7768_regulator_disable, st); in ad7768_probe()
562 st->mclk = devm_clk_get(&spi->dev, "mclk"); in ad7768_probe()
563 if (IS_ERR(st->mclk)) in ad7768_probe()
564 return PTR_ERR(st->mclk); in ad7768_probe()
566 ret = clk_prepare_enable(st->mclk); in ad7768_probe()
570 ret = devm_add_action_or_reset(&spi->dev, ad7768_clk_disable, st); in ad7768_probe()
574 st->mclk_freq = clk_get_rate(st->mclk); in ad7768_probe()
576 spi_set_drvdata(spi, indio_dev); in ad7768_probe()
577 mutex_init(&st->lock); in ad7768_probe()
579 indio_dev->channels = ad7768_channels; in ad7768_probe()
580 indio_dev->num_channels = ARRAY_SIZE(ad7768_channels); in ad7768_probe()
581 indio_dev->name = spi_get_device_id(spi)->name; in ad7768_probe()
582 indio_dev->info = &ad7768_info; in ad7768_probe()
583 indio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_TRIGGERED; in ad7768_probe()
587 dev_err(&spi->dev, "AD7768 setup failed\n"); in ad7768_probe()
591 st->trig = devm_iio_trigger_alloc(&spi->dev, "%s-dev%d", in ad7768_probe()
592 indio_dev->name, indio_dev->id); in ad7768_probe()
593 if (!st->trig) in ad7768_probe()
594 return -ENOMEM; in ad7768_probe()
596 st->trig->ops = &ad7768_trigger_ops; in ad7768_probe()
597 st->trig->dev.parent = &spi->dev; in ad7768_probe()
598 iio_trigger_set_drvdata(st->trig, indio_dev); in ad7768_probe()
599 ret = devm_iio_trigger_register(&spi->dev, st->trig); in ad7768_probe()
603 indio_dev->trig = iio_trigger_get(st->trig); in ad7768_probe()
605 init_completion(&st->completion); in ad7768_probe()
607 ret = devm_request_irq(&spi->dev, spi->irq, in ad7768_probe()
610 indio_dev->name, indio_dev); in ad7768_probe()
614 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, in ad7768_probe()
621 return devm_iio_device_register(&spi->dev, indio_dev); in ad7768_probe()
625 { "ad7768-1", 0 },
628 MODULE_DEVICE_TABLE(spi, ad7768_id_table);
631 { .compatible = "adi,ad7768-1" },
638 .name = "ad7768-1",
647 MODULE_DESCRIPTION("Analog Devices AD7768-1 ADC driver");