#include <linux/module.h>
#define TSL2550_DRV_NAME "tsl2550"
#define DRIVER_VERSION "1.2"
#define TSL2550_POWER_DOWN 0x00
#define TSL2550_POWER_UP 0x03
#define TSL2550_STANDARD_RANGE 0x18
#define TSL2550_EXTENDED_RANGE 0x1d
#define TSL2550_READ_ADC0 0x43
#define TSL2550_READ_ADC1 0x83
struct i2c_client *client;
struct mutex update_lock;
unsigned int power_state:1;
unsigned int operating_mode:1;
static const u8 TSL2550_MODE_RANGE[2] = {
TSL2550_STANDARD_RANGE, TSL2550_EXTENDED_RANGE,
static int tsl2550_set_operating_mode(struct i2c_client *client, int mode)
struct tsl2550_data *data = i2c_get_clientdata(client);
int ret = i2c_smbus_write_byte(client, TSL2550_MODE_RANGE[mode]);
data->operating_mode = mode;
static int tsl2550_set_power_state(struct i2c_client *client, int state)
struct tsl2550_data *data = i2c_get_clientdata(client);
ret = i2c_smbus_write_byte(client, TSL2550_POWER_DOWN);
ret = i2c_smbus_write_byte(client, TSL2550_POWER_UP);
tsl2550_set_operating_mode(client, data->operating_mode);
data->power_state = state;