#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/i2c.h>
#include <linux/mutex.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <linux/util_macros.h>
#include <linux/iio/iio.h>
#include <linux/iio/sysfs.h>
#define VL6180_DRV_NAME …
#define VL6180_MODEL_ID …
#define VL6180_MODEL_ID_VAL …
#define VL6180_INTR_CONFIG …
#define VL6180_INTR_CLEAR …
#define VL6180_OUT_OF_RESET …
#define VL6180_HOLD …
#define VL6180_RANGE_START …
#define VL6180_ALS_START …
#define VL6180_ALS_GAIN …
#define VL6180_ALS_IT …
#define VL6180_RANGE_STATUS …
#define VL6180_ALS_STATUS …
#define VL6180_INTR_STATUS …
#define VL6180_ALS_VALUE …
#define VL6180_RANGE_VALUE …
#define VL6180_RANGE_RATE …
#define VL6180_MODE_CONT …
#define VL6180_STARTSTOP …
#define VL6180_ALS_READY …
#define VL6180_RANGE_READY …
#define VL6180_CLEAR_ERROR …
#define VL6180_CLEAR_ALS …
#define VL6180_CLEAR_RANGE …
#define VL6180_HOLD_ON …
#define VL6180_ALS_IT_100 …
#define VL6180_ALS_GAIN_1 …
#define VL6180_ALS_GAIN_1_25 …
#define VL6180_ALS_GAIN_1_67 …
#define VL6180_ALS_GAIN_2_5 …
#define VL6180_ALS_GAIN_5 …
#define VL6180_ALS_GAIN_10 …
#define VL6180_ALS_GAIN_20 …
#define VL6180_ALS_GAIN_40 …
struct vl6180_data { … };
enum { … };
struct vl6180_chan_regs { … };
static const struct vl6180_chan_regs vl6180_chan_regs_table[] = …;
static int vl6180_read(struct i2c_client *client, u16 cmd, void *databuf,
u8 len)
{ … }
static int vl6180_read_byte(struct i2c_client *client, u16 cmd)
{ … }
static int vl6180_read_word(struct i2c_client *client, u16 cmd)
{ … }
static int vl6180_write_byte(struct i2c_client *client, u16 cmd, u8 val)
{ … }
static int vl6180_write_word(struct i2c_client *client, u16 cmd, u16 val)
{ … }
static int vl6180_measure(struct vl6180_data *data, int addr)
{ … }
static const struct iio_chan_spec vl6180_channels[] = …;
static const int vl6180_als_gain_tab[8] = …;
static const u8 vl6180_als_gain_tab_bits[8] = …;
static int vl6180_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
{ … }
static IIO_CONST_ATTR(als_gain_available, "1 1.25 1.67 2.5 5 10 20 40");
static struct attribute *vl6180_attributes[] = …;
static const struct attribute_group vl6180_attribute_group = …;
static int vl6180_hold(struct vl6180_data *data, bool hold)
{ … }
static int vl6180_set_als_gain(struct vl6180_data *data, int val, int val2)
{ … }
static int vl6180_set_it(struct vl6180_data *data, int val, int val2)
{ … }
static int vl6180_write_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int val, int val2, long mask)
{ … }
static const struct iio_info vl6180_info = …;
static int vl6180_init(struct vl6180_data *data)
{ … }
static int vl6180_probe(struct i2c_client *client)
{ … }
static const struct of_device_id vl6180_of_match[] = …;
MODULE_DEVICE_TABLE(of, vl6180_of_match);
static const struct i2c_device_id vl6180_id[] = …;
MODULE_DEVICE_TABLE(i2c, vl6180_id);
static struct i2c_driver vl6180_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;