linux/drivers/iio/adc/sd_adc_modulator.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Generic sigma delta modulator driver
   4 *
   5 * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
   6 * Author: Arnaud Pouliquen <arnaud.pouliquen@st.com>.
   7 */
   8
   9#include <linux/iio/iio.h>
  10#include <linux/iio/triggered_buffer.h>
  11#include <linux/module.h>
  12#include <linux/of_device.h>
  13
  14static const struct iio_info iio_sd_mod_iio_info;
  15
  16static const struct iio_chan_spec iio_sd_mod_ch = {
  17        .type = IIO_VOLTAGE,
  18        .indexed = 1,
  19        .scan_type = {
  20                .sign = 'u',
  21                .realbits = 1,
  22                .shift = 0,
  23        },
  24};
  25
  26static int iio_sd_mod_probe(struct platform_device *pdev)
  27{
  28        struct device *dev = &pdev->dev;
  29        struct iio_dev *iio;
  30
  31        iio = devm_iio_device_alloc(dev, 0);
  32        if (!iio)
  33                return -ENOMEM;
  34
  35        iio->dev.parent = dev;
  36        iio->dev.of_node = dev->of_node;
  37        iio->name = dev_name(dev);
  38        iio->info = &iio_sd_mod_iio_info;
  39        iio->modes = INDIO_BUFFER_HARDWARE;
  40
  41        iio->num_channels = 1;
  42        iio->channels = &iio_sd_mod_ch;
  43
  44        platform_set_drvdata(pdev, iio);
  45
  46        return devm_iio_device_register(&pdev->dev, iio);
  47}
  48
  49static const struct of_device_id sd_adc_of_match[] = {
  50        { .compatible = "sd-modulator" },
  51        { .compatible = "ads1201" },
  52        { }
  53};
  54MODULE_DEVICE_TABLE(of, sd_adc_of_match);
  55
  56static struct platform_driver iio_sd_mod_adc = {
  57        .driver = {
  58                .name = "iio_sd_adc_mod",
  59                .of_match_table = of_match_ptr(sd_adc_of_match),
  60        },
  61        .probe = iio_sd_mod_probe,
  62};
  63
  64module_platform_driver(iio_sd_mod_adc);
  65
  66MODULE_DESCRIPTION("Basic sigma delta modulator");
  67MODULE_AUTHOR("Arnaud Pouliquen <arnaud.pouliquen@st.com>");
  68MODULE_LICENSE("GPL v2");
  69