summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2020-12-24 15:53:35 +0800
committerCommit Bot <commit-bot@chromium.org>2020-12-30 00:55:03 +0000
commit88441f3602afeb2e39f1c8bcc17a230c07f43b1c (patch)
tree07c9aaf70328bb9042dfe04b60411625184bc9f5
parentbe8c81f46a50a6fef9a933c94a0df143ce4168b8 (diff)
downloadchrome-ec-88441f3602afeb2e39f1c8bcc17a230c07f43b1c.tar.gz
driver: si114x: Clean up register list
Used the datasheet to reconstruct the register table, took it as an opportunity to align the names with datasheet and clean up a bit the order of the registers/commands/parameters. BRANCH=none BUG=b:172225780 TEST=CQ Change-Id: I0b79b5ca6db439b104704b0e817d8f94fab687a8 Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2603076 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r--board/eve/board.c5
-rw-r--r--driver/als_si114x.c88
-rw-r--r--driver/als_si114x.h236
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, &reg);
}
@@ -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;