#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/iio/iio.h>
#include <linux/iio/types.h>
#define ADS7924_CHANNELS …
#define ADS7924_BITS …
#define ADS7924_DATA_SHIFT …
#define ADS7924_MODECNTRL_REG …
#define ADS7924_INTCNTRL_REG …
#define ADS7924_DATA0_U_REG …
#define ADS7924_DATA0_L_REG …
#define ADS7924_DATA1_U_REG …
#define ADS7924_DATA1_L_REG …
#define ADS7924_DATA2_U_REG …
#define ADS7924_DATA2_L_REG …
#define ADS7924_DATA3_U_REG …
#define ADS7924_DATA3_L_REG …
#define ADS7924_ULR0_REG …
#define ADS7924_LLR0_REG …
#define ADS7924_ULR1_REG …
#define ADS7924_LLR1_REG …
#define ADS7924_ULR2_REG …
#define ADS7924_LLR2_REG …
#define ADS7924_ULR3_REG …
#define ADS7924_LLR3_REG …
#define ADS7924_INTCONFIG_REG …
#define ADS7924_SLPCONFIG_REG …
#define ADS7924_ACQCONFIG_REG …
#define ADS7924_PWRCONFIG_REG …
#define ADS7924_RESET_REG …
#define ADS7924_AUTO_INCREMENT_BIT …
#define ADS7924_MODECNTRL_MODE_MASK …
#define ADS7924_MODECNTRL_SEL_MASK …
#define ADS7924_CFG_INTPOL_BIT …
#define ADS7924_CFG_INTTRIG_BIT …
#define ADS7924_CFG_INTPOL_MASK …
#define ADS7924_CFG_INTTRIG_MASK …
#define ADS7924_CFG_INTPOL_LOW …
#define ADS7924_CFG_INTPOL_HIGH …
#define ADS7924_CFG_INTTRIG_LEVEL …
#define ADS7924_CFG_INTTRIG_EDGE …
#define ADS7924_MODECNTRL_IDLE …
#define ADS7924_MODECNTRL_AWAKE …
#define ADS7924_MODECNTRL_MANUAL_SINGLE …
#define ADS7924_MODECNTRL_MANUAL_SCAN …
#define ADS7924_MODECNTRL_AUTO_SINGLE …
#define ADS7924_MODECNTRL_AUTO_SCAN …
#define ADS7924_MODECNTRL_AUTO_SINGLE_SLEEP …
#define ADS7924_MODECNTRL_AUTO_SCAN_SLEEP …
#define ADS7924_MODECNTRL_AUTO_BURST_SLEEP …
#define ADS7924_ACQTIME_MASK …
#define ADS7924_PWRUPTIME_MASK …
#define ADS7924_PWRUPTIME_US …
#define ADS7924_ACQTIME_US …
#define ADS7924_CONVTIME_US …
#define ADS7924_TOTAL_CONVTIME_US …
#define ADS7924_V_CHAN(_chan, _addr) …
struct ads7924_data { … };
static bool ads7924_is_writeable_reg(struct device *dev, unsigned int reg)
{ … }
static const struct regmap_config ads7924_regmap_config = …;
static const struct iio_chan_spec ads7924_channels[] = …;
static int ads7924_get_adc_result(struct ads7924_data *data,
struct iio_chan_spec const *chan, int *val)
{ … }
static int ads7924_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val,
int *val2, long mask)
{ … }
static const struct iio_info ads7924_info = …;
static int ads7924_get_channels_config(struct i2c_client *client,
struct iio_dev *indio_dev)
{ … }
static int ads7924_set_conv_mode(struct ads7924_data *data, int mode)
{ … }
static int ads7924_reset(struct iio_dev *indio_dev)
{
struct ads7924_data *data = iio_priv(indio_dev);
if (data->reset_gpio) {
gpiod_set_value(data->reset_gpio, 1);
mdelay(100);
gpiod_set_value(data->reset_gpio, 0);
return 0;
}
return regmap_write(data->regmap, ADS7924_RESET_REG, 0b10101010);
};
static void ads7924_reg_disable(void *data)
{ … }
static void ads7924_set_idle_mode(void *data)
{ … }
static int ads7924_probe(struct i2c_client *client)
{ … }
static const struct i2c_device_id ads7924_id[] = …;
MODULE_DEVICE_TABLE(i2c, ads7924_id);
static const struct of_device_id ads7924_of_match[] = …;
MODULE_DEVICE_TABLE(of, ads7924_of_match);
static struct i2c_driver ads7924_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;