#include <linux/mfd/mc13xxx.h>
#include <linux/platform_device.h>
#include <linux/hwmon-sysfs.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#define DRIVER_NAME "mc13783-adc"
#define MC13783_ADC_16CHANS 1
#define MC13783_ADC_BPDIV2 2
struct mc13783_adc_priv {
struct device *hwmon_dev;
char name[PLATFORM_NAME_SIZE];
static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
struct mc13783_adc_priv *priv = dev_get_drvdata(dev);
return sprintf(buf, "%s\n", priv->name);
static int mc13783_adc_read(struct device *dev,
struct device_attribute *devattr, unsigned int *val)
struct mc13783_adc_priv *priv = dev_get_drvdata(dev);
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
unsigned int channel = attr->index;
ret = mc13xxx_adc_do_conversion(priv->mc13xxx,
MC13XXX_ADC_MODE_MULT_CHAN,
*val = (sample[channel % 4] >> (channel > 3 ? 14 : 2)) & 0x3ff;