summaryrefslogtreecommitdiff
path: root/test/sbs_charging_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/sbs_charging_v2.c')
-rw-r--r--test/sbs_charging_v2.c68
1 files changed, 67 insertions, 1 deletions
diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c
index 6b7bf04ca4..addd438d7e 100644
--- a/test/sbs_charging_v2.c
+++ b/test/sbs_charging_v2.c
@@ -748,7 +748,7 @@ static int test_battery_sustainer(void)
ccprintf("Test lower < SoC < upper.\n");
display_soc = 799;
wait_charging_state();
- TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE);
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE);
ccprintf("Pass.\n");
ccprintf("Test SoC < lower < upper.\n");
@@ -805,6 +805,71 @@ static int test_battery_sustainer(void)
return EC_SUCCESS;
}
+static int test_battery_sustainer_discharge_idle(void)
+{
+ struct ec_params_charge_control p;
+ int rv;
+
+ test_setup(1);
+
+ /* Enable sustainer */
+ p.cmd = EC_CHARGE_CONTROL_CMD_SET;
+ p.mode = CHARGE_CONTROL_NORMAL;
+ p.sustain_soc.lower = 80;
+ p.sustain_soc.upper = 80;
+ rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2,
+ &p, sizeof(p), NULL, 0);
+ TEST_ASSERT(rv == EC_RES_SUCCESS);
+
+ /* Check mode transition as the SoC changes. */
+
+ /* SoC < lower (= upper) */
+ display_soc = 780;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+
+ /* (lower =) upper < SoC */
+ display_soc = 810;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE);
+
+ /* Unplug AC. Sustainer gets deactivated. */
+ gpio_set_level(GPIO_AC_PRESENT, 0);
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+
+ /* Replug AC. Sustainer gets re-activated. */
+ gpio_set_level(GPIO_AC_PRESENT, 1);
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE);
+
+ /* lower = SoC = upper */
+ display_soc = 800;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE);
+
+ /* SoC < lower (= upper) */
+ display_soc = 789;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+
+ /* Disable sustainer */
+ p.cmd = EC_CHARGE_CONTROL_CMD_SET;
+ p.mode = CHARGE_CONTROL_NORMAL;
+ p.sustain_soc.lower = -1;
+ p.sustain_soc.upper = -1;
+ rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2,
+ &p, sizeof(p), NULL, 0);
+ TEST_ASSERT(rv == EC_RES_SUCCESS);
+
+ /* This time, mode will stay in NORMAL even when upper < SoC. */
+ display_soc = 810;
+ wait_charging_state();
+ TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_NORMAL);
+
+ return EC_SUCCESS;
+}
+
void run_test(void)
{
RUN_TEST(test_charge_state);
@@ -815,6 +880,7 @@ void run_test(void)
RUN_TEST(test_hc_current_limit);
RUN_TEST(test_low_battery_hostevents);
RUN_TEST(test_battery_sustainer);
+ RUN_TEST(test_battery_sustainer_discharge_idle);
test_print_result();
}