Skip to content

Commit e017071

Browse files
James Courtier-DuttonJames Courtier-Dutton
authored andcommitted
Add in battery_extender functionallity.
Signed-off-by: James Courtier-Dutton <james@superbug.co.uk>
1 parent da76adf commit e017071

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

common/charge_state.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ static unsigned int user_current_limit = -1U;
8282
test_export_static timestamp_t shutdown_target_time;
8383
static timestamp_t precharge_start_time;
8484
static struct sustain_soc sustain_soc;
85-
static struct sustain_soc3 sustain_soc3[4];
85+
struct sustain_soc3 sustain_soc3[4];
8686
int sustain3_slot = 0;
8787
static struct current_limit {
8888
uint32_t value; /* Charge limit to apply, in mA */

zephyr/program/framework/src/battery_extender.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ static int sustainer_upper = 100;
5656

5757
static uint8_t charging_maximum_level = EC_CHARGE_LIMIT_RESTORE;
5858
static uint8_t old_charger_limit;
59+
extern int sustain3_slot;
60+
extern struct sustain_soc3 sustain_soc3[4];
5961

6062
static void extender_init(void)
6163
{
@@ -80,11 +82,30 @@ void charger_sustainer_reset(void)
8082
{
8183
old_charger_limit = 0;
8284
//battery_sustainer_set(-1, -1);
83-
int rv = set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
84-
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
85-
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
86-
mode_text[CHARGE_CONTROL_NORMAL],
87-
rv);
85+
sustain3_slot = 0;
86+
//int rv = set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
87+
//CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
88+
// rv == EC_SUCCESS ? "Switched" : "Failed to switch",
89+
// mode_text[CHARGE_CONTROL_NORMAL],
90+
// rv);
91+
}
92+
93+
int battery_extender_sustain3_set(int slot, int lower, int upper, int discharge);
94+
95+
int battery_extender_sustain3_set(int slot, int lower, int upper, int discharge) {
96+
if ((slot < 2) || (slot >=4)) return 0;
97+
sustain_soc3[slot].lower = lower;
98+
sustain_soc3[slot].upper = upper;
99+
sustain_soc3[slot].discharge = discharge;
100+
return 1;
101+
}
102+
103+
int battery_extender_sustain3_set_slot(int slot);
104+
105+
int battery_extender_sustain3_set_slot(int slot) {
106+
if ((slot < 2) || (slot >=4)) return 0;
107+
sustain3_slot = slot;
108+
return 1;
88109
}
89110

90111
static void battery_percentage_control(void)
@@ -159,12 +180,16 @@ void battery_extender(void)
159180
timestamp_expired(batt_extender_deadline_stage2, &now)) {
160181
batt_extender_deadline_stage2.val = 0;
161182
stage = BATT_EXTENDER_STAGE_2;
162-
battery_sustainer_set(MIN(85, sustainer_lower), MIN(87, sustainer_upper));
183+
battery_extender_sustain3_set(3, MIN(83, sustainer_lower), MIN(85, sustainer_upper), MIN(87, sustainer_upper));
184+
battery_extender_sustain3_set_slot(3);
185+
//battery_sustainer_set(MIN(85, sustainer_lower), MIN(87, sustainer_upper));
163186
} else if (batt_extender_deadline.val &&
164187
timestamp_expired(batt_extender_deadline, &now)) {
165188
batt_extender_deadline.val = 0;
166189
stage = BATT_EXTENDER_STAGE_1;
167-
battery_sustainer_set(MIN(90, sustainer_lower), MIN(95, sustainer_upper));
190+
battery_extender_sustain3_set(2, MIN(90, sustainer_lower), MIN(93, sustainer_upper), MIN(95, sustainer_upper));
191+
battery_extender_sustain3_set_slot(2);
192+
//battery_sustainer_set(MIN(90, sustainer_lower), MIN(95, sustainer_upper));
168193
}
169194
}
170195
DECLARE_HOOK(HOOK_SECOND, battery_extender, HOOK_PRIO_DEFAULT);

0 commit comments

Comments
 (0)