#include <dt-bindings/iio/adc/ingenic,adc.h>
#include <linux/clk.h>
#include <linux/iio/buffer.h>
#include <linux/iio/iio.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/iopoll.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/mutex.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#define JZ_ADC_REG_ENABLE …
#define JZ_ADC_REG_CFG …
#define JZ_ADC_REG_CTRL …
#define JZ_ADC_REG_STATUS …
#define JZ_ADC_REG_ADSAME …
#define JZ_ADC_REG_ADWAIT …
#define JZ_ADC_REG_ADTCH …
#define JZ_ADC_REG_ADBDAT …
#define JZ_ADC_REG_ADSDAT …
#define JZ_ADC_REG_ADCMD …
#define JZ_ADC_REG_ADCLK …
#define JZ_ADC_REG_ENABLE_PD …
#define JZ_ADC_REG_CFG_AUX_MD …
#define JZ_ADC_REG_CFG_BAT_MD …
#define JZ_ADC_REG_CFG_SAMPLE_NUM(n) …
#define JZ_ADC_REG_CFG_PULL_UP(n) …
#define JZ_ADC_REG_CFG_CMD_SEL …
#define JZ_ADC_REG_CFG_VBAT_SEL …
#define JZ_ADC_REG_CFG_TOUCH_OPS_MASK …
#define JZ_ADC_REG_ADCLK_CLKDIV_LSB …
#define JZ4725B_ADC_REG_ADCLK_CLKDIV10US_LSB …
#define JZ4770_ADC_REG_ADCLK_CLKDIV10US_LSB …
#define JZ4770_ADC_REG_ADCLK_CLKDIVMS_LSB …
#define JZ_ADC_REG_ADCMD_YNADC …
#define JZ_ADC_REG_ADCMD_YPADC …
#define JZ_ADC_REG_ADCMD_XNADC …
#define JZ_ADC_REG_ADCMD_XPADC …
#define JZ_ADC_REG_ADCMD_VREFPYP …
#define JZ_ADC_REG_ADCMD_VREFPXP …
#define JZ_ADC_REG_ADCMD_VREFPXN …
#define JZ_ADC_REG_ADCMD_VREFPAUX …
#define JZ_ADC_REG_ADCMD_VREFPVDD33 …
#define JZ_ADC_REG_ADCMD_VREFNYN …
#define JZ_ADC_REG_ADCMD_VREFNXP …
#define JZ_ADC_REG_ADCMD_VREFNXN …
#define JZ_ADC_REG_ADCMD_VREFAUX …
#define JZ_ADC_REG_ADCMD_YNGRU …
#define JZ_ADC_REG_ADCMD_XNGRU …
#define JZ_ADC_REG_ADCMD_XPGRU …
#define JZ_ADC_REG_ADCMD_YPSUP …
#define JZ_ADC_REG_ADCMD_XNSUP …
#define JZ_ADC_REG_ADCMD_XPSUP …
#define JZ_ADC_AUX_VREF …
#define JZ_ADC_AUX_VREF_BITS …
#define JZ_ADC_BATTERY_LOW_VREF …
#define JZ_ADC_BATTERY_LOW_VREF_BITS …
#define JZ4725B_ADC_BATTERY_HIGH_VREF …
#define JZ4725B_ADC_BATTERY_HIGH_VREF_BITS …
#define JZ4740_ADC_BATTERY_HIGH_VREF …
#define JZ4740_ADC_BATTERY_HIGH_VREF_BITS …
#define JZ4760_ADC_BATTERY_VREF …
#define JZ4770_ADC_BATTERY_VREF …
#define JZ4770_ADC_BATTERY_VREF_BITS …
#define JZ_ADC_IRQ_AUX …
#define JZ_ADC_IRQ_BATTERY …
#define JZ_ADC_IRQ_TOUCH …
#define JZ_ADC_IRQ_PEN_DOWN …
#define JZ_ADC_IRQ_PEN_UP …
#define JZ_ADC_IRQ_PEN_DOWN_SLEEP …
#define JZ_ADC_IRQ_SLEEP …
struct ingenic_adc;
struct ingenic_adc_soc_data { … };
struct ingenic_adc { … };
static void ingenic_adc_set_adcmd(struct iio_dev *iio_dev, unsigned long mask)
{ … }
static void ingenic_adc_set_config(struct ingenic_adc *adc,
uint32_t mask,
uint32_t val)
{ … }
static void ingenic_adc_enable_unlocked(struct ingenic_adc *adc,
int engine,
bool enabled)
{ … }
static void ingenic_adc_enable(struct ingenic_adc *adc,
int engine,
bool enabled)
{ … }
static int ingenic_adc_capture(struct ingenic_adc *adc,
int engine)
{ … }
static int ingenic_adc_write_raw(struct iio_dev *iio_dev,
struct iio_chan_spec const *chan,
int val,
int val2,
long m)
{ … }
static const int jz4725b_adc_battery_raw_avail[] = …;
static const int jz4725b_adc_battery_scale_avail[] = …;
static const int jz4740_adc_battery_raw_avail[] = …;
static const int jz4740_adc_battery_scale_avail[] = …;
static const int jz4760_adc_battery_scale_avail[] = …;
static const int jz4770_adc_battery_raw_avail[] = …;
static const int jz4770_adc_battery_scale_avail[] = …;
static int jz4725b_adc_init_clk_div(struct device *dev, struct ingenic_adc *adc)
{ … }
static int jz4770_adc_init_clk_div(struct device *dev, struct ingenic_adc *adc)
{ … }
static const struct iio_chan_spec jz4740_channels[] = …;
static const struct iio_chan_spec jz4760_channels[] = …;
static const struct iio_chan_spec jz4770_channels[] = …;
static const struct ingenic_adc_soc_data jz4725b_adc_soc_data = …;
static const struct ingenic_adc_soc_data jz4740_adc_soc_data = …;
static const struct ingenic_adc_soc_data jz4760_adc_soc_data = …;
static const struct ingenic_adc_soc_data jz4770_adc_soc_data = …;
static int ingenic_adc_read_avail(struct iio_dev *iio_dev,
struct iio_chan_spec const *chan,
const int **vals,
int *type,
int *length,
long m)
{ … }
static int ingenic_adc_read_chan_info_raw(struct iio_dev *iio_dev,
struct iio_chan_spec const *chan,
int *val)
{ … }
static int ingenic_adc_read_raw(struct iio_dev *iio_dev,
struct iio_chan_spec const *chan,
int *val,
int *val2,
long m)
{ … }
static int ingenic_adc_fwnode_xlate(struct iio_dev *iio_dev,
const struct fwnode_reference_args *iiospec)
{ … }
static const struct iio_info ingenic_adc_info = …;
static int ingenic_adc_buffer_enable(struct iio_dev *iio_dev)
{ … }
static int ingenic_adc_buffer_disable(struct iio_dev *iio_dev)
{ … }
static const struct iio_buffer_setup_ops ingenic_buffer_setup_ops = …;
static irqreturn_t ingenic_adc_irq(int irq, void *data)
{ … }
static int ingenic_adc_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id ingenic_adc_of_match[] = …;
MODULE_DEVICE_TABLE(of, ingenic_adc_of_match);
static struct platform_driver ingenic_adc_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;