#include <linux/hwspinlock.h>
#include <linux/iio/iio.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/nvmem-consumer.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#define SC2730_MODULE_EN …
#define SC2731_MODULE_EN …
#define SC27XX_MODULE_ADC_EN …
#define SC2721_ARM_CLK_EN …
#define SC2730_ARM_CLK_EN …
#define SC2731_ARM_CLK_EN …
#define SC27XX_CLK_ADC_EN …
#define SC27XX_CLK_ADC_CLK_EN …
#define SC27XX_ADC_CTL …
#define SC27XX_ADC_CH_CFG …
#define SC27XX_ADC_DATA …
#define SC27XX_ADC_INT_EN …
#define SC27XX_ADC_INT_CLR …
#define SC27XX_ADC_INT_STS …
#define SC27XX_ADC_INT_RAW …
#define SC27XX_ADC_EN …
#define SC27XX_ADC_CHN_RUN …
#define SC27XX_ADC_12BIT_MODE …
#define SC27XX_ADC_RUN_NUM_MASK …
#define SC27XX_ADC_RUN_NUM_SHIFT …
#define SC27XX_ADC_CHN_ID_MASK …
#define SC27XX_ADC_SCALE_MASK …
#define SC2721_ADC_SCALE_MASK …
#define SC27XX_ADC_SCALE_SHIFT …
#define SC2721_ADC_SCALE_SHIFT …
#define SC27XX_ADC_IRQ_EN …
#define SC27XX_ADC_IRQ_CLR …
#define SC27XX_ADC_IRQ_RAW …
#define SC27XX_ADC_DATA_MASK …
#define SC27XX_ADC_HWLOCK_TIMEOUT …
#define SC27XX_ADC_RDY_TIMEOUT …
#define SC27XX_ADC_POLL_RAW_STATUS …
#define SC27XX_ADC_CHANNEL_MAX …
#define SC27XX_VOLT_RATIO(n, d) …
#define SC27XX_RATIO_NUMERATOR_OFFSET …
#define SC27XX_RATIO_DENOMINATOR_MASK …
#define SC27XX_ADC_REFVOL_VDD35 …
#define SC27XX_ADC_REFVOL_VDD28 …
struct sc27xx_adc_data { … };
struct sc27xx_adc_variant_data { … };
struct sc27xx_adc_linear_graph { … };
static struct sc27xx_adc_linear_graph big_scale_graph = …;
static struct sc27xx_adc_linear_graph small_scale_graph = …;
static const struct sc27xx_adc_linear_graph sc2731_big_scale_graph_calib = …;
static const struct sc27xx_adc_linear_graph sc2731_small_scale_graph_calib = …;
static const struct sc27xx_adc_linear_graph big_scale_graph_calib = …;
static const struct sc27xx_adc_linear_graph small_scale_graph_calib = …;
static int sc27xx_adc_get_calib_data(u32 calib_data, int calib_adc)
{ … }
static int adc_nvmem_cell_calib_data(struct sc27xx_adc_data *data, const char *cell_name)
{ … }
static int sc27xx_adc_scale_calibration(struct sc27xx_adc_data *data,
bool big_scale)
{ … }
static int sc2720_adc_get_ratio(int channel, int scale)
{ … }
static int sc2721_adc_get_ratio(int channel, int scale)
{ … }
static int sc2730_adc_get_ratio(int channel, int scale)
{ … }
static int sc2731_adc_get_ratio(int channel, int scale)
{ … }
static void sc2720_adc_scale_init(struct sc27xx_adc_data *data)
{ … }
static void sc2730_adc_scale_init(struct sc27xx_adc_data *data)
{ … }
static void sc2731_adc_scale_init(struct sc27xx_adc_data *data)
{ … }
static int sc27xx_adc_read(struct sc27xx_adc_data *data, int channel,
int scale, int *val)
{ … }
static void sc27xx_adc_volt_ratio(struct sc27xx_adc_data *data, int channel, int scale,
struct u32_fract *fract)
{ … }
static int adc_to_volt(struct sc27xx_adc_linear_graph *graph,
int raw_adc)
{ … }
static int sc27xx_adc_to_volt(struct sc27xx_adc_linear_graph *graph,
int raw_adc)
{ … }
static int sc27xx_adc_convert_volt(struct sc27xx_adc_data *data, int channel,
int scale, int raw_adc)
{ … }
static int sc27xx_adc_read_processed(struct sc27xx_adc_data *data,
int channel, int scale, int *val)
{ … }
static int sc27xx_adc_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
{ … }
static int sc27xx_adc_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val, int val2, long mask)
{ … }
static const struct iio_info sc27xx_info = …;
#define SC27XX_ADC_CHANNEL(index, mask) …
static const struct iio_chan_spec sc27xx_channels[] = …;
static int sc27xx_adc_enable(struct sc27xx_adc_data *data)
{ … }
static void sc27xx_adc_disable(void *_data)
{ … }
static const struct sc27xx_adc_variant_data sc2731_data = …;
static const struct sc27xx_adc_variant_data sc2730_data = …;
static const struct sc27xx_adc_variant_data sc2721_data = …;
static const struct sc27xx_adc_variant_data sc2720_data = …;
static int sc27xx_adc_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id sc27xx_adc_of_match[] = …;
MODULE_DEVICE_TABLE(of, sc27xx_adc_of_match);
static struct platform_driver sc27xx_adc_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;