diff options
Diffstat (limited to 'zephyr/emul/emul_isl923x.c')
-rw-r--r-- | zephyr/emul/emul_isl923x.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/zephyr/emul/emul_isl923x.c b/zephyr/emul/emul_isl923x.c index 5ee94dfaec..dcbaaf641b 100644 --- a/zephyr/emul/emul_isl923x.c +++ b/zephyr/emul/emul_isl923x.c @@ -43,6 +43,9 @@ LOG_MODULE_REGISTER(isl923x_emul, CONFIG_ISL923X_EMUL_LOG_LEVEL); /** Mask used for the control 1 register */ #define REG_CONTROL1_MASK (GENMASK(15, 8) | GENMASK(6, 0)) +/** Mask used for the control 2 register */ +#define REG_CONTROL2_MASK GENMASK(15, 0) + /** Mask used for the AC PROCHOT register */ #define REG_PROCHOT_AC_MASK GENMASK(12, 7) @@ -68,6 +71,8 @@ struct isl923x_emul_data { uint16_t control_0_reg; /** Emulated control 1 register */ uint16_t control_1_reg; + /** Emulated control 2 register */ + uint16_t control_2_reg; /** Emulated AC PROCHOT register */ uint16_t ac_prochot_reg; /** Emulated DC PROCHOT register */ @@ -196,6 +201,13 @@ static int isl923x_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val, else *val = (uint8_t)((data->control_1_reg >> 8) & 0xff); break; + case ISL923X_REG_CONTROL2: + __ASSERT_NO_MSG(bytes == 0 || bytes == 1); + if (bytes == 0) + *val = (uint8_t)(data->control_2_reg & 0xff); + else + *val = (uint8_t)((data->control_2_reg >> 8) & 0xff); + break; case ISL923X_REG_PROCHOT_AC: __ASSERT_NO_MSG(bytes == 0 || bytes == 1); if (bytes == 0) @@ -270,6 +282,13 @@ static int isl923x_emul_write_byte(struct i2c_emul *emul, int reg, uint8_t val, else data->control_1_reg |= (val << 8) & REG_CONTROL1_MASK; break; + case ISL923X_REG_CONTROL2: + __ASSERT_NO_MSG(bytes == 1 || bytes == 2); + if (bytes == 1) + data->control_2_reg = val & REG_CONTROL2_MASK; + else + data->control_2_reg |= (val << 8) & REG_CONTROL2_MASK; + break; case ISL923X_REG_PROCHOT_AC: __ASSERT_NO_MSG(bytes == 1 || bytes == 2); if (bytes == 1) |