162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Generic sigma delta modulator driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
662306a36Sopenharmony_ci * Author: Arnaud Pouliquen <arnaud.pouliquen@st.com>.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/iio/iio.h>
1062306a36Sopenharmony_ci#include <linux/iio/triggered_buffer.h>
1162306a36Sopenharmony_ci#include <linux/module.h>
1262306a36Sopenharmony_ci#include <linux/mod_devicetable.h>
1362306a36Sopenharmony_ci#include <linux/platform_device.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic const struct iio_info iio_sd_mod_iio_info;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic const struct iio_chan_spec iio_sd_mod_ch = {
1862306a36Sopenharmony_ci	.type = IIO_VOLTAGE,
1962306a36Sopenharmony_ci	.indexed = 1,
2062306a36Sopenharmony_ci	.scan_type = {
2162306a36Sopenharmony_ci		.sign = 'u',
2262306a36Sopenharmony_ci		.realbits = 1,
2362306a36Sopenharmony_ci		.shift = 0,
2462306a36Sopenharmony_ci	},
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic int iio_sd_mod_probe(struct platform_device *pdev)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	struct device *dev = &pdev->dev;
3062306a36Sopenharmony_ci	struct iio_dev *iio;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	iio = devm_iio_device_alloc(dev, 0);
3362306a36Sopenharmony_ci	if (!iio)
3462306a36Sopenharmony_ci		return -ENOMEM;
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	iio->name = dev_name(dev);
3762306a36Sopenharmony_ci	iio->info = &iio_sd_mod_iio_info;
3862306a36Sopenharmony_ci	iio->modes = INDIO_BUFFER_HARDWARE;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	iio->num_channels = 1;
4162306a36Sopenharmony_ci	iio->channels = &iio_sd_mod_ch;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	platform_set_drvdata(pdev, iio);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	return devm_iio_device_register(&pdev->dev, iio);
4662306a36Sopenharmony_ci}
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistatic const struct of_device_id sd_adc_of_match[] = {
4962306a36Sopenharmony_ci	{ .compatible = "sd-modulator" },
5062306a36Sopenharmony_ci	{ .compatible = "ads1201" },
5162306a36Sopenharmony_ci	{ }
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, sd_adc_of_match);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistatic struct platform_driver iio_sd_mod_adc = {
5662306a36Sopenharmony_ci	.driver = {
5762306a36Sopenharmony_ci		.name = "iio_sd_adc_mod",
5862306a36Sopenharmony_ci		.of_match_table = sd_adc_of_match,
5962306a36Sopenharmony_ci	},
6062306a36Sopenharmony_ci	.probe = iio_sd_mod_probe,
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_cimodule_platform_driver(iio_sd_mod_adc);
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciMODULE_DESCRIPTION("Basic sigma delta modulator");
6662306a36Sopenharmony_ciMODULE_AUTHOR("Arnaud Pouliquen <arnaud.pouliquen@st.com>");
6762306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
68