#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/iio/events.h>
#include <linux/iio/iio.h>
#include <linux/iio/sysfs.h>
#include <linux/platform_data/tsl2772.h>
#include <linux/regulator/consumer.h>
#define PROX_STAT_CAL 0
#define PROX_STAT_SAMP 1
#define MAX_SAMPLES_CAL 200
#define TRITON_ID 0x00
#define SWORDFISH_ID 0x30
#define HALIBUT_ID 0x20
#define TSL2772_LUX_CALC_OVER_FLOW 65535
#define TSL2772_MAX_CONFIG_REG 16
#define TSL2772_CNTRL 0x00
#define TSL2772_ALS_TIME 0X01
#define TSL2772_PRX_TIME 0x02
#define TSL2772_WAIT_TIME 0x03
#define TSL2772_ALS_MINTHRESHLO 0X04
#define TSL2772_ALS_MINTHRESHHI 0X05
#define TSL2772_ALS_MAXTHRESHLO 0X06
#define TSL2772_ALS_MAXTHRESHHI 0X07
#define TSL2772_PRX_MINTHRESHLO 0X08
#define TSL2772_PRX_MINTHRESHHI 0X09
#define TSL2772_PRX_MAXTHRESHLO 0X0A
#define TSL2772_PRX_MAXTHRESHHI 0X0B
#define TSL2772_PERSISTENCE 0x0C
#define TSL2772_ALS_PRX_CONFIG 0x0D
#define TSL2772_PRX_COUNT 0x0E
#define TSL2772_GAIN 0x0F
#define TSL2772_NOTUSED 0x10
#define TSL2772_REVID 0x11
#define TSL2772_CHIPID 0x12
#define TSL2772_STATUS 0x13
#define TSL2772_ALS_CHAN0LO 0x14
#define TSL2772_ALS_CHAN0HI 0x15
#define TSL2772_ALS_CHAN1LO 0x16
#define TSL2772_ALS_CHAN1HI 0x17
#define TSL2772_PRX_LO 0x18
#define TSL2772_PRX_HI 0x19
#define TSL2772_CMD_REG 0x80
#define TSL2772_CMD_SPL_FN 0x60
#define TSL2772_CMD_REPEAT_PROTO 0x00
#define TSL2772_CMD_AUTOINC_PROTO 0x20
#define TSL2772_CMD_PROX_INT_CLR 0X05
#define TSL2772_CMD_ALS_INT_CLR 0x06
#define TSL2772_CMD_PROXALS_INT_CLR 0X07
#define TSL2772_CNTL_ADC_ENBL 0x02
#define TSL2772_CNTL_PWR_ON 0x01
#define TSL2772_STA_ADC_VALID 0x01
#define TSL2772_STA_PRX_VALID 0x02
#define TSL2772_STA_ADC_PRX_VALID (TSL2772_STA_ADC_VALID | \
TSL2772_STA_PRX_VALID)