#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/mutex.h>
#include <linux/completion.h>
#include <linux/iio/iio.h>
#include <linux/iio/machine.h>
#include <linux/iio/driver.h>
#include <linux/mfd/da9150/core.h>
#include <linux/mfd/da9150/registers.h>
enum da9150_gpadc_hw_channel { … };
enum da9150_gpadc_channel { … };
struct da9150_gpadc { … };
static irqreturn_t da9150_gpadc_irq(int irq, void *data)
{ … }
static int da9150_gpadc_read_adc(struct da9150_gpadc *gpadc, int hw_chan)
{ … }
static inline int da9150_gpadc_gpio_6v_voltage_now(int raw_val)
{ … }
static inline int da9150_gpadc_ibus_current_avg(int raw_val)
{ … }
static inline int da9150_gpadc_vbus_21v_voltage_now(int raw_val)
{ … }
static inline int da9150_gpadc_vsys_6v_voltage_now(int raw_val)
{ … }
static int da9150_gpadc_read_processed(struct da9150_gpadc *gpadc, int channel,
int hw_chan, int *val)
{ … }
static int da9150_gpadc_read_scale(int channel, int *val, int *val2)
{ … }
static int da9150_gpadc_read_offset(int channel, int *val)
{ … }
static int da9150_gpadc_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
{ … }
static const struct iio_info da9150_gpadc_info = …;
#define DA9150_GPADC_CHANNEL(_id, _hw_id, _type, chan_info, \
_ext_name) …
#define DA9150_GPADC_CHANNEL_RAW(_id, _hw_id, _type, _ext_name) …
#define DA9150_GPADC_CHANNEL_SCALED(_id, _hw_id, _type, _ext_name) …
#define DA9150_GPADC_CHANNEL_PROCESSED(_id, _hw_id, _type, _ext_name) …
static const struct iio_chan_spec da9150_gpadc_channels[] = …;
static struct iio_map da9150_gpadc_default_maps[] = …;
static int da9150_gpadc_probe(struct platform_device *pdev)
{ … }
static struct platform_driver da9150_gpadc_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;