diff options
-rw-r--r-- | board/eve/board.c | 5 | ||||
-rw-r--r-- | driver/als_si114x.c | 88 | ||||
-rw-r--r-- | driver/als_si114x.h | 236 |
3 files changed, 93 insertions, 236 deletions
diff --git a/board/eve/board.c b/board/eve/board.c index 4e1557f9de..2bb1b42f46 100644 --- a/board/eve/board.c +++ b/board/eve/board.c @@ -833,8 +833,9 @@ static struct si114x_drv_data_t g_si114x_data = { }, /* light */ { - .base_data_reg = SI114X_REG_ALSVIS_DATA0, - .irq_flags = SI114X_ALS_INT_FLAG, + .base_data_reg = SI114X_ALS_VIS_DATA0, + .irq_flags = SI114X_IRQ_ENABLE_ALS_IE_INT0 | + SI114X_IRQ_ENABLE_ALS_IE_INT1, .scale = 1, .offset = -256, } diff --git a/driver/als_si114x.c b/driver/als_si114x.c index be6bad9c33..262f3f076b 100644 --- a/driver/als_si114x.c +++ b/driver/als_si114x.c @@ -62,20 +62,20 @@ static int si114x_param_op(const struct motion_sensor_t *s, mutex_lock(s->mutex); - if (op != SI114X_CMD_PARAM_QUERY) { + if (op != SI114X_COMMAND_PARAM_QUERY) { ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PARAM_WR, *value); + SI114X_PARAM_WR, *value); if (ret != EC_SUCCESS) goto error; } ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_COMMAND, op | (param & 0x1F)); + SI114X_COMMAND, op | (param & 0x1F)); if (ret != EC_SUCCESS) goto error; ret = raw_read8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PARAM_RD, value); + SI114X_PARAM_RD, value); if (ret != EC_SUCCESS) goto error; @@ -117,7 +117,7 @@ static int si114x_read_results(struct motion_sensor_t *s, int nb) * we correct later with the scale parameter. */ if (s->type == MOTIONSENSE_TYPE_PROX) - val = SI114X_PS_INVERSION(val); + val = BIT(16) / val; val = val * type_data->scale + val * type_data->uscale / 10000; s->raw_xyz[i] = val; @@ -195,7 +195,7 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) return EC_ERROR_NOT_HANDLED; ret = raw_read8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_IRQ_STATUS, &val); + SI114X_IRQ_STATUS, &val); if (ret) return ret; @@ -204,7 +204,7 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) /* clearing IRQ */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_IRQ_STATUS, + SI114X_IRQ_STATUS, val & type_data->irq_flags); if (ret != EC_SUCCESS) CPRINTS("clearing irq failed"); @@ -217,8 +217,8 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) /* Fire pending requests */ if (data->state == SI114X_ALS_IN_PROGRESS_PS_PENDING) { ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_COMMAND, - SI114X_CMD_PS_FORCE); + SI114X_COMMAND, + SI114X_COMMAND_PS_FORCE); data->state = SI114X_PS_IN_PROGRESS; } else { data->state = SI114X_IDLE; @@ -230,8 +230,8 @@ static int irq_handler(struct motion_sensor_t *s, uint32_t *event) ret = si114x_read_results(s, SI114X_NUM_LEDS); if (data->state == SI114X_PS_IN_PROGRESS_ALS_PENDING) { ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_COMMAND, - SI114X_CMD_ALS_FORCE); + SI114X_COMMAND, + SI114X_COMMAND_ALS_FORCE); data->state = SI114X_ALS_IN_PROGRESS; } else { data->state = SI114X_IDLE; @@ -273,11 +273,11 @@ static int read(const struct motion_sensor_t *s, intv3_t v) case SI114X_IDLE: switch (s->type) { case MOTIONSENSE_TYPE_LIGHT: - cmd = SI114X_CMD_ALS_FORCE; + cmd = SI114X_COMMAND_ALS_FORCE; data->state = SI114X_ALS_IN_PROGRESS; break; case MOTIONSENSE_TYPE_PROX: - cmd = SI114X_CMD_PS_FORCE; + cmd = SI114X_COMMAND_PS_FORCE; data->state = SI114X_PS_IN_PROGRESS; break; default: @@ -285,7 +285,7 @@ static int read(const struct motion_sensor_t *s, intv3_t v) return EC_ERROR_INVAL; } ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_COMMAND, cmd); + SI114X_COMMAND, cmd); #ifdef CONFIG_ALS_SI114X_POLLING hook_call_deferred(&si114x_read_deferred_data, SI114x_POLLING_DELAY); @@ -314,7 +314,7 @@ static int read(const struct motion_sensor_t *s, intv3_t v) int ret, val; ret = raw_read8(s->port, s->addr, - SI114X_REG_IRQ_STATUS, &val); + SI114X_IRQ_STATUS, &val); CPRINTS("%d stuck IRQ_STATUS 0x%02x - ret %d", s->name, val, ret); init(s); @@ -329,18 +329,18 @@ static int si114x_set_chlist(const struct motion_sensor_t *s) int reg = 0; /* Not interested in temperature (AUX nor IR) */ - reg = SI114X_CHLIST_EN_ALSVIS; + reg = SI114X_PARAM_CHLIST_EN_ALS_VIS; switch (SI114X_NUM_LEDS) { case 3: - reg |= SI114X_CHLIST_EN_PS3; + reg |= SI114X_PARAM_CHLIST_EN_PS3; case 2: - reg |= SI114X_CHLIST_EN_PS2; + reg |= SI114X_PARAM_CHLIST_EN_PS3; case 1: - reg |= SI114X_CHLIST_EN_PS1; + reg |= SI114X_PARAM_CHLIST_EN_PS3; break; } - return si114x_param_op(s, SI114X_CMD_PARAM_SET, + return si114x_param_op(s, SI114X_COMMAND_PARAM_SET, SI114X_PARAM_CHLIST, ®); } @@ -348,7 +348,7 @@ static int si114x_set_chlist(const struct motion_sensor_t *s) static int si114x_revisions(const struct motion_sensor_t *s) { int val; - int ret = raw_read8(s->port, s->addr, SI114X_REG_PART_ID, &val); + int ret = raw_read8(s->port, s->addr, SI114X_PART_ID, &val); if (ret != EC_SUCCESS) return ret; @@ -357,7 +357,7 @@ static int si114x_revisions(const struct motion_sensor_t *s) return EC_ERROR_ACCESS_DENIED; } - ret = raw_read8(s->port, s->port, s->addr, SI114X_REG_SEQ_ID, &val); + ret = raw_read8(s->port, s->port, s->addr, SI114X_SEQ_ID, &val); if (ret != EC_SUCCESS) return ret; @@ -374,47 +374,49 @@ static int si114x_initialize(const struct motion_sensor_t *s) /* send reset command */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_COMMAND, SI114X_CMD_RESET); + SI114X_COMMAND, SI114X_COMMAND_RESET); if (ret != EC_SUCCESS) return ret; msleep(20); /* hardware key, magic value */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_HW_KEY, 0x17); + SI114X_HW_KEY, SI114X_HW_KEY_VALUE); if (ret != EC_SUCCESS) return ret; msleep(20); /* interrupt configuration, interrupt output enable */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_INT_CFG, SI114X_INT_CFG_OE); + SI114X_INT_CFG, SI114X_INT_CFG_INT_OE); if (ret != EC_SUCCESS) return ret; /* enable interrupt for certain activities */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_IRQ_ENABLE, - SI114X_PS3_IE | SI114X_PS2_IE | SI114X_PS1_IE | - SI114X_ALS_INT0_IE); + SI114X_IRQ_ENABLE, + SI114X_IRQ_ENABLE_PS3_IE | + SI114X_IRQ_ENABLE_PS2_IE | + SI114X_IRQ_ENABLE_PS1_IE | + SI114X_IRQ_ENABLE_ALS_IE_INT0); if (ret != EC_SUCCESS) return ret; /* Only forced mode */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_MEAS_RATE, 0); + SI114X_MEAS_RATE, 0); if (ret != EC_SUCCESS) return ret; /* measure ALS every time device wakes up */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_ALS_RATE, 0); + SI114X_ALS_RATE, 0); if (ret != EC_SUCCESS) return ret; /* measure proximity every time device wakes up */ ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PS_RATE, 0); + SI114X_PS_RATE, 0); if (ret != EC_SUCCESS) return ret; @@ -422,19 +424,19 @@ static int si114x_initialize(const struct motion_sensor_t *s) switch (SI114X_NUM_LEDS) { case 3: ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PS_LED3, 0x0f); + SI114X_PS_LED3, 0x0f); if (ret != EC_SUCCESS) return ret; ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PS_LED21, 0xff); + SI114X_PS_LED21, 0xff); break; case 2: ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PS_LED21, 0xff); + SI114X_PS_LED21, 0xff); break; case 1: ret = raw_write8(s->port, s->i2c_spi_addr_flags, - SI114X_REG_PS_LED21, 0x0f); + SI114X_PS_LED21, 0x0f); break; } if (ret != EC_SUCCESS) @@ -446,8 +448,8 @@ static int si114x_initialize(const struct motion_sensor_t *s) /* set normal proximity measurement mode, set high signal range * PS measurement */ - val = SI114X_PARAM_PS_ADC_MISC_NORMAL_MODE; - ret = si114x_param_op(s, SI114X_CMD_PARAM_SET, + val = SI114X_PARAM_PS_ADC_MISC_MODE_NORMAL_PROXIMITY; + ret = si114x_param_op(s, SI114X_COMMAND_PARAM_SET, SI114X_PARAM_PS_ADC_MISC, &val); return ret; } @@ -466,17 +468,17 @@ static int set_resolution(const struct motion_sensor_t *s, } else { if (res < 0 || res > 7) return EC_ERROR_PARAM2; - reg1 = SI114X_PARAM_ALSVIS_ADC_GAIN; - reg2 = SI114X_PARAM_ALSVIS_ADC_COUNTER; + reg1 = SI114X_PARAM_ALS_VIS_ADC_GAIN; + reg2 = SI114X_PARAM_ALS_VIS_ADC_COUNTER; } val = res; - ret = si114x_param_op(s, SI114X_CMD_PARAM_SET, reg1, &val); + ret = si114x_param_op(s, SI114X_COMMAND_PARAM_SET, reg1, &val); if (ret != EC_SUCCESS) return ret; /* set recovery period to one's complement of gain */ val = (~res & 0x07) << 4; - ret = si114x_param_op(s, SI114X_CMD_PARAM_SET, reg2, &val); + ret = si114x_param_op(s, SI114X_COMMAND_PARAM_SET, reg2, &val); return ret; } @@ -487,10 +489,10 @@ static int get_resolution(const struct motion_sensor_t *s) reg = SI114X_PARAM_PS_ADC_GAIN; else /* ignore IR led */ - reg = SI114X_PARAM_ALSVIS_ADC_GAIN; + reg = SI114X_PARAM_ALS_VIS_ADC_GAIN; val = 0; - ret = si114x_param_op(s, SI114X_CMD_PARAM_QUERY, reg, &val); + ret = si114x_param_op(s, SI114X_COMMAND_PARAM_QUERY, reg, &val); if (ret != EC_SUCCESS) return -1; diff --git a/driver/als_si114x.h b/driver/als_si114x.h index dc5459e8db..2084c55f09 100644 --- a/driver/als_si114x.h +++ b/driver/als_si114x.h @@ -5,204 +5,62 @@ * Silicon Image SI1141/SI1142 light sensor driver */ -/* - * si114x.c - Support for Silabs si114x combined ambient light and - * proximity sensor - * - * Copyright 2012 Peter Meerwald <pmeerw@pmeerw.net> - * - * This file is subject to the terms and conditions of version 2 of - * the GNU General Public License. See the file COPYING in the main - * directory of this archive for more details. - * - * IIO driver for si114x (7-bit I2C slave address 0x5a) with sequencer - * version >= A03 - */ - #ifndef __CROS_EC_ALS_SI114X_H #define __CROS_EC_ALS_SI114X_H #define SI114X_ADDR_FLAGS 0x5a -#define SI114X_REG_PART_ID 0x00 -#define SI114X_SI1141_ID 0x41 -#define SI114X_SI1142_ID 0x42 -#define SI114X_SI1143_ID 0x43 - -#define SI114X_NUM_LEDS (CONFIG_ALS_SI114X - 0x40) - -#define SI114X_REG_REV_ID 0x01 -#define SI114X_REG_SEQ_ID 0x02 -#define SI114X_REG_INT_CFG 0x03 -#define SI114X_REG_IRQ_ENABLE 0x04 -#define SI114X_REG_IRQ_MODE1 0x05 -#define SI114X_REG_IRQ_MODE2 0x06 -#define SI114X_REG_HW_KEY 0x07 -/* RATE stores a 16 bit value compressed to 8 bit */ -/* Not used, the sensor is in force mode */ -#define SI114X_REG_MEAS_RATE 0x08 - - -#define SI114X_REG_ALS_RATE 0x09 -#define SI114X_REG_PS_RATE 0x0a -#define SI114X_REG_ALS_LOW_TH0 0x0b -#define SI114X_REG_ALS_LOW_TH1 0x0c -#define SI114X_REG_ALS_HI_TH0 0x0d -#define SI114X_REG_ALS_HI_TH1 0x0e -#define SI114X_REG_PS_LED21 0x0f -#define SI114X_REG_PS_LED3 0x10 -/* - * for rev A10 and below TH0 stores a 16 bit value compressed to 8 bit and - * TH1 is not used; newer revision have the LSB in TH0 and the MSB in TH1 - */ -#define SI114X_REG_PS1_TH0 0x11 -#define SI114X_REG_PS1_TH1 0x12 -#define SI114X_REG_PS2_TH0 0x13 -#define SI114X_REG_PS2_TH1 0x11 -#define SI114X_REG_PS3_TH0 0x15 -#define SI114X_REG_PS3_TH1 0x16 -#define SI114X_REG_PARAM_WR 0x17 -#define SI114X_REG_COMMAND 0x18 -#define SI114X_REG_RESPONSE 0x20 -#define SI114X_REG_IRQ_STATUS 0x21 -#define SI114X_REG_ALSVIS_DATA0 0x22 -#define SI114X_REG_ALSVIS_DATA1 0x23 -#define SI114X_REG_ALSIR_DATA0 0x24 -#define SI114X_REG_ALSIR_DATA1 0x25 -#define SI114X_REG_PS1_DATA0 0x26 -#define SI114X_REG_PS1_DATA1 0x27 -#define SI114X_REG_PS2_DATA0 0x28 -#define SI114X_REG_PS2_DATA1 0x29 -#define SI114X_REG_PS3_DATA0 0x2a -#define SI114X_REG_PS3_DATA1 0x2b -#define SI114X_PS_INVERSION(_data) (BIT(16) / (_data)) -#define SI114X_REG_AUX_DATA0 0x2c -#define SI114X_REG_AUX_DATA1 0x2d -#define SI114X_REG_PARAM_RD 0x2e -#define SI114X_REG_CHIP_STAT 0x30 - -/* helper to figure out PS_LED register / shift per channel */ -#define SI114X_PS_LED_REG(ch) \ - (((ch) == 2) ? SI114X_REG_PS_LED3 : SI114X_REG_PS_LED21) -#define SI114X_PS_LED_SHIFT(ch) \ - (((ch) == 1) ? 4 : 0) - -/* Parameter offsets */ -#define SI114X_PARAM_I2C_ADDR 0x00 -#define SI114X_PARAM_CHLIST 0x01 -#define SI114X_PARAM_PSLED12_SELECT 0x02 -#define SI114X_PARAM_PSLED3_SELECT 0x03 -#define SI114X_PARAM_FILTER_EN 0x04 -#define SI114X_PARAM_PS_ENCODING 0x05 -#define SI114X_PARAM_ALS_ENCODING 0x06 -#define SI114X_PARAM_PS1_ADC_MUX 0x07 -#define SI114X_PARAM_PS2_ADC_MUX 0x08 -#define SI114X_PARAM_PS3_ADC_MUX 0x09 -#define SI114X_PARAM_PS_ADC_COUNTER 0x0a -#define SI114X_PARAM_PS_ADC_GAIN 0x0b -#define SI114X_PARAM_PS_ADC_MISC 0x0c -#define SI114X_PARAM_PS_ADC_MISC_HIGH_RANGE 0x20 -#define SI114X_PARAM_PS_ADC_MISC_NORMAL_MODE 0x04 -#define SI114X_PARAM_ALS_ADC_MUX 0x0d -#define SI114X_PARAM_ALSIR_ADC_MUX 0x0e -#define SI114X_PARAM_AUX_ADC_MUX 0x0f -#define SI114X_PARAM_ALSVIS_ADC_COUNTER 0x10 -#define SI114X_PARAM_ALSVIS_ADC_GAIN 0x11 -#define SI114X_PARAM_ALSVIS_ADC_MISC 0x12 -#define SI114X_PARAM_ALS_HYST 0x16 -#define SI114X_PARAM_PS_HYST 0x17 -#define SI114X_PARAM_PS_HISTORY 0x18 -#define SI114X_PARAM_ALS_HISTORY 0x19 -#define SI114X_PARAM_ADC_OFFSET 0x1a -#define SI114X_PARAM_SLEEP_CTRL 0x1b -#define SI114X_PARAM_LED_RECOVERY 0x1c -#define SI114X_PARAM_ALSIR_ADC_COUNTER 0x1d -#define SI114X_PARAM_ALSIR_ADC_GAIN 0x1e -#define SI114X_PARAM_ALSIR_ADC_MISC 0x1f - -/* Channel enable masks for CHLIST parameter */ -#define SI114X_CHLIST_EN_PS1 0x01 -#define SI114X_CHLIST_EN_PS2 0x02 -#define SI114X_CHLIST_EN_PS3 0x04 -#define SI114X_CHLIST_EN_ALSVIS 0x10 -#define SI114X_CHLIST_EN_ALSIR 0x20 -#define SI114X_CHLIST_EN_AUX 0x40 - -/* Signal range mask for ADC_MISC parameter */ -#define SI114X_MISC_RANGE 0x20 +#define SI114X_PART_ID 0x00 +#define SI114X_SEQ_ID 0x02 -/* Commands for REG_COMMAND */ -#define SI114X_CMD_NOP 0x00 -#define SI114X_CMD_RESET 0x01 -#define SI114X_CMD_BUSADDR 0x02 -#define SI114X_CMD_PS_FORCE 0x05 -#define SI114X_CMD_ALS_FORCE 0x06 -#define SI114X_CMD_PSALS_FORCE 0x07 -#define SI114X_CMD_PS_PAUSE 0x09 -#define SI114X_CMD_ALS_PAUSE 0x0a -#define SI114X_CMD_PSALS_PAUSE 0x0b -#define SI114X_CMD_PS_AUTO 0x0d -#define SI114X_CMD_ALS_AUTO 0x0e -#define SI114X_CMD_PSALS_AUTO 0x0f -#define SI114X_CMD_PARAM_QUERY 0x80 -#define SI114X_CMD_PARAM_SET 0xa0 -#define SI114X_CMD_PARAM_AND 0xc0 -#define SI114X_CMD_PARAM_OR 0xe0 +#define SI114X_INT_CFG 0x03 +#define SI114X_INT_CFG_INT_OE BIT(0) -/* Interrupt configuration masks for INT_CFG register */ -#define SI114X_INT_CFG_OE 0x01 /* enable interrupt */ -#define SI114X_INT_CFG_MODE 0x02 /* auto reset interrupt pin */ +#define SI114X_IRQ_ENABLE 0x04 +#define SI114X_IRQ_ENABLE_PS3_IE BIT(4) +#define SI114X_IRQ_ENABLE_PS2_IE BIT(3) +#define SI114X_IRQ_ENABLE_PS1_IE BIT(2) +#define SI114X_IRQ_ENABLE_ALS_IE_INT1 BIT(1) +#define SI114X_IRQ_ENABLE_ALS_IE_INT0 BIT(0) -/* Interrupt enable masks for IRQ_ENABLE register */ -#define SI114X_CMD_IE 0x20 -#define SI114X_PS3_IE 0x10 -#define SI114X_PS2_IE 0x08 -#define SI114X_PS1_IE 0x04 -#define SI114X_ALS_INT1_IE 0x02 -#define SI114X_ALS_INT0_IE 0x01 -#define SI114X_ALS_INT_FLAG \ - (SI114X_ALS_INT1_IE | SI114X_ALS_INT0_IE) -#define SI114X_PS_INT_FLAG \ - (SI114X_PS3_IE | SI114X_PS2_IE | SI114X_PS1_IE) +#define SI114X_HW_KEY 0x07 +#define SI114X_HW_KEY_VALUE 0x17 +#define SI114X_MEAS_RATE 0x08 +#define SI114X_ALS_RATE 0x09 +#define SI114X_PS_RATE 0x0A -/* Interrupt mode masks for IRQ_MODE1 register */ -#define SI114X_PS2_IM_GREATER 0xc0 -#define SI114X_PS2_IM_CROSS 0x40 -#define SI114X_PS1_IM_GREATER 0x30 -#define SI114X_PS1_IM_CROSS 0x10 - -/* Interrupt mode masks for IRQ_MODE2 register */ -#define SI114X_CMD_IM_ERROR 0x04 -#define SI114X_PS3_IM_GREATER 0x03 -#define SI114X_PS3_IM_CROSS 0x01 - -/* Measurement rate settings */ -#define SI114X_MEAS_RATE_FORCED 0x00 -#define SI114X_MEAS_RATE_10MS 0x84 -#define SI114X_MEAS_RATE_20MS 0x94 -#define SI114X_MEAS_RATE_100MS 0xb9 -#define SI114X_MEAS_RATE_496MS 0xdf -#define SI114X_MEAS_RATE_1984MS 0xff - -/* ALS rate settings relative to measurement rate */ -#define SI114X_ALS_RATE_OFF 0x00 -#define SI114X_ALS_RATE_1X 0x08 -#define SI114X_ALS_RATE_10X 0x32 -#define SI114X_ALS_RATE_100X 0x69 - -/* PS rate settings relative to measurement rate */ -#define SI114X_PS_RATE_OFF 0x00 -#define SI114X_PS_RATE_1X 0x08 -#define SI114X_PS_RATE_10X 0x32 -#define SI114X_PS_RATE_100X 0x69 +#define SI114X_PS_LED21 0x0F +#define SI114X_PS_LED3 0x10 +#define SI114X_NUM_LEDS (CONFIG_ALS_SI114X - 0x40) -/* Sequencer revision from SEQ_ID */ -#define SI114X_SEQ_REV_A01 0x01 -#define SI114X_SEQ_REV_A02 0x02 -#define SI114X_SEQ_REV_A03 0x03 -#define SI114X_SEQ_REV_A10 0x08 -#define SI114X_SEQ_REV_A11 0x09 +#define SI114X_PARAM_WR 0x17 +#define SI114X_COMMAND 0x18 + +#define SI114X_COMMAND_PARAM_QUERY 0x80 +#define SI114X_COMMAND_PARAM_SET 0xA0 +#define SI114X_PARAM_CHLIST 0x01 +#define SI114X_PARAM_CHLIST_EN_ALS_VIS BIT(4) +#define SI114X_PARAM_CHLIST_EN_PS3 BIT(2) +#define SI114X_PARAM_CHLIST_EN_PS2 BIT(1) +#define SI114X_PARAM_CHLIST_EN_PS1 BIT(0) +#define SI114X_PARAM_PS_ADC_COUNTER 0x0A +#define SI114X_PARAM_PS_ADC_GAIN 0x0B +#define SI114X_PARAM_PS_ADC_MISC 0x0C +#define SI114X_PARAM_PS_ADC_MISC_MODE BIT(2) +#define SI114X_PARAM_PS_ADC_MISC_MODE_NORMAL_PROXIMITY BIT(2) +#define SI114X_PARAM_ALS_VIS_ADC_COUNTER 0x10 +#define SI114X_PARAM_ALS_VIS_ADC_GAIN 0x11 +#define SI114X_PARAM_ALS_VIS_ADC_MISC 0x12 + +#define SI114X_COMMAND_RESET 0x01 +#define SI114X_COMMAND_PS_FORCE 0x05 +#define SI114X_COMMAND_ALS_FORCE 0x06 + +#define SI114X_IRQ_STATUS 0x21 +#define SI114X_ALS_VIS_DATA0 0x22 + +#define SI114X_PARAM_RD 0x2E /* Proximity sensor finds an object within 5 cm, disable light sensor */ #define SI114X_COVERED_THRESHOLD 5 @@ -234,10 +92,6 @@ enum si114x_state { SI114X_PS_IN_PROGRESS_ALS_PENDING, }; -/** - * struct si114x_data - si114x chip state data - * @client: I2C client - **/ struct si114x_typed_data_t { uint8_t base_data_reg; uint8_t irq_flags; |