summaryrefslogtreecommitdiff
path: root/zephyr/emul/emul_ln9310.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/emul/emul_ln9310.c')
-rw-r--r--zephyr/emul/emul_ln9310.c73
1 files changed, 20 insertions, 53 deletions
diff --git a/zephyr/emul/emul_ln9310.c b/zephyr/emul/emul_ln9310.c
index 72d7f904ea..bc29fae432 100644
--- a/zephyr/emul/emul_ln9310.c
+++ b/zephyr/emul/emul_ln9310.c
@@ -216,13 +216,19 @@ void ln9310_emul_set_vin_gt_10v(const struct emul *emulator, bool is_gt_10v)
bool ln9310_emul_is_init(const struct emul *emulator)
{
- struct ln9310_emul_data *data = emulator->data;
+ struct ln9310_emul_data *data = emulator->data;
bool interrupts_unmasked = (data->int1_msk_reg & LN9310_INT1_MODE) == 0;
bool min_switch_freq_set =
(data->spare_0_reg & LN9310_SPARE_0_LB_MIN_FREQ_SEL_ON) != 0;
-
- return interrupts_unmasked && min_switch_freq_set;
+ bool functional_mode_switching_21_enabled =
+ (data->power_ctrl_reg & LN9310_PWR_OP_MODE_SWITCH21) != 0;
+ bool functional_mode_switching_31_enabled =
+ (data->power_ctrl_reg & LN9310_PWR_OP_MODE_SWITCH31) != 0;
+
+ return interrupts_unmasked && min_switch_freq_set &&
+ (functional_mode_switching_21_enabled ||
+ functional_mode_switching_31_enabled);
}
enum battery_cell_type board_get_battery_cell_type(void)
@@ -247,104 +253,87 @@ static int ln9310_emul_write_byte(struct i2c_emul *emul, int reg, uint8_t val,
{
struct ln9310_emul_data *data = LN9310_DATA_FROM_I2C_EMUL(emul);
+ __ASSERT(bytes == 1, "bytes 0x%x != 0x1 on reg 0x%x", bytes, reg);
+
switch (reg) {
case LN9310_REG_INT1:
- __ASSERT_NO_MSG(bytes == 1);
data->int1_reg = val;
break;
case LN9310_REG_SYS_STS:
- __ASSERT_NO_MSG(bytes == 1);
data->sys_sts_reg = val;
break;
case LN9310_REG_INT1_MSK:
- __ASSERT_NO_MSG(bytes == 1);
data->int1_msk_reg = val;
break;
case LN9310_REG_STARTUP_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->startup_ctrl_reg = val;
break;
case LN9310_REG_LION_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->lion_ctrl_reg = val;
break;
case LN9310_REG_BC_STS_B:
- __ASSERT_NO_MSG(bytes == 1);
data->bc_sts_b_reg = val;
break;
case LN9310_REG_BC_STS_C:
- LOG_ERR("Can't write to BC STS C register");
- return -EINVAL;
+ __ASSERT(false,
+ "Write to an unverified as safe "
+ "read-only register on 0x%x",
+ reg);
+ break;
case LN9310_REG_CFG_0:
- __ASSERT_NO_MSG(bytes == 1);
data->cfg_0_reg = val;
break;
case LN9310_REG_CFG_4:
- __ASSERT_NO_MSG(bytes == 1);
data->cfg_4_reg = val;
break;
case LN9310_REG_CFG_5:
- __ASSERT_NO_MSG(bytes == 1);
data->cfg_5_reg = val;
break;
case LN9310_REG_PWR_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->power_ctrl_reg = val;
break;
case LN9310_REG_TIMER_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->timer_ctrl_reg = val;
break;
case LN9310_REG_LB_CTRL:
- __ASSERT_NO_MSG(bytes = 1);
data->lower_bound_ctrl_reg = val;
break;
case LN9310_REG_SPARE_0:
- __ASSERT_NO_MSG(bytes == 1);
data->spare_0_reg = val;
break;
case LN9310_REG_SWAP_CTRL_0:
- __ASSERT_NO_MSG(bytes == 1);
data->swap_ctrl_0_reg = val;
break;
case LN9310_REG_SWAP_CTRL_1:
- __ASSERT_NO_MSG(bytes == 1);
data->swap_ctrl_1_reg = val;
break;
case LN9310_REG_SWAP_CTRL_2:
- __ASSERT_NO_MSG(bytes == 1);
data->swap_ctrl_2_reg = val;
break;
case LN9310_REG_SWAP_CTRL_3:
- __ASSERT_NO_MSG(bytes == 1);
data->swap_ctrl_3_reg = val;
break;
case LN9310_REG_TRACK_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->track_ctrl_reg = val;
break;
case LN9310_REG_MODE_CHANGE_CFG:
- __ASSERT_NO_MSG(bytes == 1);
data->mode_change_cfg_reg = val;
break;
case LN9310_REG_SYS_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->sys_ctrl_reg = val;
break;
case LN9310_REG_FORCE_SC21_CTRL_1:
- __ASSERT_NO_MSG(bytes == 1);
data->force_sc21_ctrl_1_reg = val;
break;
case LN9310_REG_FORCE_SC21_CTRL_2:
- __ASSERT_NO_MSG(bytes == 1);
data->force_sc21_ctrl_2_reg = val;
break;
case LN9310_REG_TEST_MODE_CTRL:
- __ASSERT_NO_MSG(bytes == 1);
data->test_mode_ctrl_reg = val;
break;
default:
- return -EINVAL;
+ __ASSERT(false, "Unimplemented Register Access Error on 0x%x",
+ reg);
}
mode_change(data);
return 0;
@@ -373,101 +362,79 @@ static int ln9310_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val,
{
struct ln9310_emul_data *data = LN9310_DATA_FROM_I2C_EMUL(emul);
+ __ASSERT(bytes == 0, "bytes 0x%x != 0x0 on reg 0x%x", bytes, reg);
+
switch (reg) {
case LN9310_REG_INT1:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->int1_reg;
break;
case LN9310_REG_SYS_STS:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->sys_sts_reg;
break;
case LN9310_REG_INT1_MSK:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->int1_msk_reg;
break;
case LN9310_REG_STARTUP_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->startup_ctrl_reg;
break;
case LN9310_REG_LION_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->lion_ctrl_reg;
break;
case LN9310_REG_BC_STS_B:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->bc_sts_b_reg;
break;
case LN9310_REG_BC_STS_C:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->bc_sts_c_reg;
break;
case LN9310_REG_CFG_0:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->cfg_0_reg;
break;
case LN9310_REG_CFG_4:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->cfg_4_reg;
break;
case LN9310_REG_CFG_5:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->cfg_5_reg;
break;
case LN9310_REG_PWR_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->power_ctrl_reg;
break;
case LN9310_REG_TIMER_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->timer_ctrl_reg;
break;
case LN9310_REG_LB_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->lower_bound_ctrl_reg;
break;
case LN9310_REG_SPARE_0:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->spare_0_reg;
break;
case LN9310_REG_SWAP_CTRL_0:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->swap_ctrl_0_reg;
break;
case LN9310_REG_SWAP_CTRL_1:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->swap_ctrl_1_reg;
break;
case LN9310_REG_SWAP_CTRL_2:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->swap_ctrl_2_reg;
break;
case LN9310_REG_SWAP_CTRL_3:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->swap_ctrl_3_reg;
break;
case LN9310_REG_TRACK_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->track_ctrl_reg;
break;
case LN9310_REG_MODE_CHANGE_CFG:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->mode_change_cfg_reg;
break;
case LN9310_REG_SYS_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->sys_ctrl_reg;
break;
case LN9310_REG_FORCE_SC21_CTRL_1:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->force_sc21_ctrl_1_reg;
break;
case LN9310_REG_FORCE_SC21_CTRL_2:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->force_sc21_ctrl_2_reg;
break;
case LN9310_REG_TEST_MODE_CTRL:
- __ASSERT_NO_MSG(bytes == 0);
*val = data->test_mode_ctrl_reg;
break;
default: