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