Skip to content

Commit c25dec4

Browse files
LeoCX-Tsaiquinchou77
authored andcommitted
fwk: avoid reset timer trigger clear charger limit
when AC drop will trigger extender reset timer and if timer times end will set back the charger mode to normal but if charger limit is active we should keep the status. BRANCH=fwk-main BUG=https://app.clickup.com/t/86et2u0ve (#1) TEST= test on azalea, setting charger limit to 80% and batt extender reset time to 1 min into S0, plug-out AC wait 2min than plug-in AC, check charger mode still discharge or Idle Signed-off-by: LeoCX_Tsai <LeoCX_Tsai@compal.com> (cherry picked from commit 1d228d5020aa81c074d8c45b55d0ac1eb48bca39)
1 parent 3ed7daa commit c25dec4

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

zephyr/program/framework/src/battery_extender.c

+24-9
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@ int charger_sustainer_percentage(void)
7474
return charging_maximum_level;
7575
}
7676

77+
void charger_sustainer_reset(void)
78+
{
79+
old_charger_limit = 0;
80+
battery_sustainer_set(-1, -1);
81+
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
82+
}
83+
7784
static void battery_percentage_control(void)
7885
{
7986
if (charging_maximum_level == EC_CHARGE_LIMIT_RESTORE) {
@@ -83,9 +90,9 @@ static void battery_percentage_control(void)
8390
}
8491

8592
if (charging_maximum_level & CHG_LIMIT_OVERRIDE ||
86-
!charging_maximum_level) {
87-
battery_sustainer_set(-1, -1);
88-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
93+
!charging_maximum_level ||
94+
charging_maximum_level == 100) {
95+
charger_sustainer_reset();
8996
return;
9097
}
9198

@@ -136,8 +143,10 @@ void battery_extender(void)
136143
now.val + battery_extender_trigger;
137144
batt_extender_deadline_stage2.val =
138145
now.val + battery_extender_trigger + 2*DAY;
139-
battery_sustainer_set(-1, -1);
140-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
146+
/* if charger limit has been set don't clear sustainer and charger mode */
147+
if (charger_sustainer_percentage() == 100) {
148+
charger_sustainer_reset();
149+
}
141150
}
142151

143152
if (batt_extender_deadline_stage2.val &&
@@ -194,8 +203,7 @@ static enum ec_status battery_extender_hc(struct host_cmd_handler_args *args)
194203
if (batt_extender_disable) {
195204
/* if charger limit has been set don't control sustainer again */
196205
if (charger_sustainer_percentage() == 100) {
197-
battery_sustainer_set(-1, -1);
198-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
206+
charger_sustainer_reset();
199207
}
200208
stage = BATT_EXTENDER_STAGE_0;
201209
}
@@ -323,8 +331,7 @@ static int cmd_batt_extender(int argc, const char **argv)
323331
CPRINTS("battery extender %s",
324332
disable ? "enabled" : "disabled");
325333
if (batt_extender_disable) {
326-
battery_sustainer_set(-1, -1);
327-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
334+
charger_sustainer_reset();
328335
stage = BATT_EXTENDER_STAGE_0;
329336
} else {
330337
if (battery_extender_reset) {
@@ -385,6 +392,14 @@ static int cmd_batt_extender(int argc, const char **argv)
385392
print_time_offset(reset_deadline.val, now.val);
386393
}
387394
CPRINTF("\tsustainer percentage:\n");
395+
if (stage == BATT_EXTENDER_STAGE_1) {
396+
sustainer_lower = MIN(90, sustainer_lower);
397+
sustainer_upper = MIN(95, sustainer_upper);
398+
} else if (stage == BATT_EXTENDER_STAGE_2) {
399+
sustainer_lower = MIN(85, sustainer_lower);
400+
sustainer_upper = MIN(87, sustainer_upper);
401+
}
402+
388403
CPRINTF("\tlower: %d, upper: %d\n", sustainer_lower, sustainer_upper);
389404
CPRINTF("\tUser charge limit:%d\n", charging_maximum_level);
390405
}

0 commit comments

Comments
 (0)