On Fri, 1 Dec 2017 18:40:13 +0100 Arnaud Pouliquen <arnaud.pouliquen@xxxxxx> wrote: > Add generic driver to support sigma delta modulators. > Typically, this device is hardware connected to > an IIO device in charge of the conversion. Devices are > bonded through the hardware consumer API. > > Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@xxxxxx> I love this little one ;) Smallest IIO driver yet! Doesn't technically 'do' anything but that's not the point. Acked-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > --- > drivers/iio/adc/Kconfig | 12 ++++++ > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/sd_adc_modulator.c | 81 ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 94 insertions(+) > create mode 100644 drivers/iio/adc/sd_adc_modulator.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 5762565..c5db62f 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -626,6 +626,18 @@ config SPEAR_ADC > To compile this driver as a module, choose M here: the > module will be called spear_adc. > > +config SD_ADC_MODULATOR > + tristate "Generic sigma delta modulator" > + depends on OF > + select IIO_BUFFER > + select IIO_TRIGGERED_BUFFER > + help > + Select this option to enables sigma delta modulator. This driver can > + support generic sigma delta modulators. > + > + This driver can also be built as a module. If so, the module > + will be called sd_adc_modulator. > + > config STM32_ADC_CORE > tristate "STMicroelectronics STM32 adc core" > depends on ARCH_STM32 || COMPILE_TEST > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index 9874e05..d800325 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -81,3 +81,4 @@ obj-$(CONFIG_VF610_ADC) += vf610_adc.o > obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o > xilinx-xadc-y := xilinx-xadc-core.o xilinx-xadc-events.o > obj-$(CONFIG_XILINX_XADC) += xilinx-xadc.o > +obj-$(CONFIG_SD_ADC_MODULATOR) += sd_adc_modulator.o > diff --git a/drivers/iio/adc/sd_adc_modulator.c b/drivers/iio/adc/sd_adc_modulator.c > new file mode 100644 > index 0000000..08bd7b6 > --- /dev/null > +++ b/drivers/iio/adc/sd_adc_modulator.c > @@ -0,0 +1,81 @@ > +/* > + * Generic sigma delta modulator driver > + * > + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved > + * Author: Arnaud Pouliquen <arnaud.pouliquen@xxxxxx>. > + * > + * License type: GPLv2 > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License version 2 as published by > + * the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + * or FITNESS FOR A PARTICULAR PURPOSE. > + * See the GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License along with > + * this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <linux/iio/iio.h> > +#include <linux/iio/triggered_buffer.h> > +#include <linux/module.h> > +#include <linux/of_device.h> > + > +static const struct iio_info iio_sd_mod_iio_info; > + > +static const struct iio_chan_spec iio_sd_mod_ch = { > + .type = IIO_VOLTAGE, > + .indexed = 1, > + .scan_type = { > + .sign = 'u', > + .realbits = 1, > + .shift = 0, > + }, > +}; > + > +static int iio_sd_mod_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct iio_dev *iio; > + > + iio = devm_iio_device_alloc(dev, 0); > + if (!iio) > + return -ENOMEM; > + > + iio->dev.parent = dev; > + iio->dev.of_node = dev->of_node; > + iio->name = dev_name(dev); > + iio->info = &iio_sd_mod_iio_info; > + iio->modes = INDIO_BUFFER_HARDWARE; > + > + iio->num_channels = 1; > + iio->channels = &iio_sd_mod_ch; > + > + platform_set_drvdata(pdev, iio); > + > + return devm_iio_device_register(&pdev->dev, iio); > +} > + > +static const struct of_device_id sd_adc_of_match[] = { > + { .compatible = "sd-modulator" }, > + { .compatible = "ads1201" }, > + { } > +}; > +MODULE_DEVICE_TABLE(of, sd_adc_of_match); > + > +static struct platform_driver iio_sd_mod_adc = { > + .driver = { > + .name = "iio_sd_adc_mod", > + .of_match_table = of_match_ptr(sd_adc_of_match), > + }, > + .probe = iio_sd_mod_probe, > +}; > + > +module_platform_driver(iio_sd_mod_adc); > + > +MODULE_DESCRIPTION("Basic sigma delta modulator"); > +MODULE_AUTHOR("Arnaud Pouliquen <arnaud.pouliquen@xxxxxx>"); > +MODULE_LICENSE("GPL v2"); -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html