Skip to content

Commit 5d95925

Browse files
James Courtier-DuttonJames Courtier-Dutton
authored andcommitted
Add some debug output around change control mode changes.
Disable CHARGE_CONTROL_DISCHARGE so that we do not discharge if the battery soc > upper. Signed-off-by: James Courtier-Dutton <james@superbug.co.uk>
1 parent b7961ad commit 5d95925

3 files changed

Lines changed: 67 additions & 22 deletions

File tree

common/charge_state.c

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,15 @@ int battery_sustainer_set(int8_t lower, int8_t upper)
231231
return EC_ERROR_INVAL;
232232
}
233233

234+
#if 0 // Not used any more
234235
static void battery_sustainer_disable(void)
235236
{
236237
battery_sustainer_set(-1, -1);
237238
}
239+
#endif
238240

239-
test_export_static bool battery_sustainer_enabled(void)
241+
//test_export_static bool battery_sustainer_enabled(void)
242+
bool battery_sustainer_enabled(void)
240243
{
241244
return sustain_soc.lower != -1 && sustain_soc.upper != -1;
242245
}
@@ -594,6 +597,9 @@ int set_chg_ctrl_mode(enum ec_charge_control_mode mode)
594597
int current, voltage;
595598
int rv;
596599

600+
CPRINTS("%s: Trying to switch control mode from %s to %s", __func__,
601+
mode_text[local_state.chg_ctl_mode],
602+
mode_text[mode]);
597603
current = local_state.manual_current;
598604
voltage = local_state.manual_voltage;
599605

@@ -620,8 +626,10 @@ int set_chg_ctrl_mode(enum ec_charge_control_mode mode)
620626

621627
if (IS_ENABLED(CONFIG_CHARGER_DISCHARGE_ON_AC)) {
622628
rv = charger_discharge_on_ac(discharge_on_ac);
623-
if (rv != EC_SUCCESS)
629+
if (rv != EC_SUCCESS) {
630+
CPRINTS("%s: Returning due to failure of charger_discharge_on_ac() rv=%d", __func__, rv);
624631
return rv;
632+
}
625633
}
626634

627635
/* Commit all atomically */
@@ -946,15 +954,16 @@ sustain_switch_mode(enum ec_charge_control_mode mode)
946954
* We come here only if the soc is already above the
947955
* upper limit at the time the sustainer started.
948956
*/
949-
new_mode = CHARGE_CONTROL_DISCHARGE;
957+
//new_mode = CHARGE_CONTROL_DISCHARGE;
958+
new_mode = CHARGE_CONTROL_IDLE;
950959
} else if (sustain_soc.upper == soc) {
951960
/*
952961
* We've been charging and finally reached the upper.
953962
* Let's switch to IDLE to stay.
954963
*/
955-
if (sustain_soc.flags & EC_CHARGE_CONTROL_FLAG_NO_IDLE)
956-
new_mode = CHARGE_CONTROL_DISCHARGE;
957-
else
964+
//if (sustain_soc.flags & EC_CHARGE_CONTROL_FLAG_NO_IDLE)
965+
// new_mode = CHARGE_CONTROL_DISCHARGE;
966+
//else
958967
new_mode = CHARGE_CONTROL_IDLE;
959968
}
960969
break;
@@ -972,7 +981,8 @@ sustain_switch_mode(enum ec_charge_control_mode mode)
972981
* This can happen only if sustainer is restarted with
973982
* decreased upper limit. Let's discharge to the upper.
974983
*/
975-
new_mode = CHARGE_CONTROL_DISCHARGE;
984+
//new_mode = CHARGE_CONTROL_DISCHARGE;
985+
new_mode = CHARGE_CONTROL_IDLE;
976986
break;
977987
case CHARGE_CONTROL_DISCHARGE:
978988
/* Discharging actively. */
@@ -1015,9 +1025,10 @@ static void sustain_battery_soc(void)
10151025
return;
10161026

10171027
rv = set_chg_ctrl_mode(new_mode);
1018-
CPRINTS("%s: %s control mode to %s", __func__,
1028+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
10191029
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
1020-
mode_text[new_mode]);
1030+
mode_text[new_mode],
1031+
rv);
10211032
}
10221033

10231034
static void current_limit_battery_soc(void)
@@ -1045,7 +1056,7 @@ void charger_init(void)
10451056
*/
10461057
battery_get_params(&curr.batt);
10471058

1048-
battery_sustainer_disable();
1059+
//battery_sustainer_disable();
10491060
}
10501061
DECLARE_HOOK(HOOK_INIT, charger_init, HOOK_PRIO_DEFAULT);
10511062

@@ -1279,7 +1290,11 @@ static void process_ac_change(const int chgnum)
12791290
prev_ac = curr.ac;
12801291
} else {
12811292
/* Some things are only meaningful on AC */
1282-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
1293+
int rv = set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
1294+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
1295+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
1296+
mode_text[CHARGE_CONTROL_NORMAL],
1297+
rv);
12831298
battery_seems_dead = 0;
12841299
prev_ac = curr.ac;
12851300

@@ -2143,12 +2158,14 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
21432158

21442159
if (p->cmd == EC_CHARGE_CONTROL_CMD_SET) {
21452160
if (p->mode == CHARGE_CONTROL_NORMAL) {
2146-
rv = battery_sustainer_set(p->sustain_soc.lower,
2161+
if ((p->sustain_soc.lower != -1) && (p->sustain_soc.upper != -1)) {
2162+
rv = battery_sustainer_set(p->sustain_soc.lower,
21472163
p->sustain_soc.upper);
2148-
if (rv == EC_RES_UNAVAILABLE)
2149-
return EC_RES_UNAVAILABLE;
2150-
if (rv)
2151-
return EC_RES_INVALID_PARAM;
2164+
if (rv == EC_RES_UNAVAILABLE)
2165+
return EC_RES_UNAVAILABLE;
2166+
if (rv)
2167+
return EC_RES_INVALID_PARAM;
2168+
}
21522169
if (args->version == 2) {
21532170
/*
21542171
* V2 uses lower == upper to indicate NO_IDLE.
@@ -2162,7 +2179,7 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
21622179
sustain_soc.flags = p->flags;
21632180
}
21642181
} else {
2165-
battery_sustainer_disable();
2182+
//battery_sustainer_disable();
21662183
}
21672184
} else if (p->cmd == EC_CHARGE_CONTROL_CMD_GET) {
21682185
r->mode = get_chg_ctrl_mode();
@@ -2177,6 +2194,10 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
21772194
}
21782195

21792196
rv = set_chg_ctrl_mode(p->mode);
2197+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
2198+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
2199+
mode_text[p->mode],
2200+
rv);
21802201
if (rv != EC_SUCCESS)
21812202
return EC_RES_ERROR;
21822203

@@ -2425,6 +2446,10 @@ static int command_chgstate(int argc, const char **argv)
24252446
return EC_ERROR_PARAM2;
24262447
rv = set_chg_ctrl_mode(val ? CHARGE_CONTROL_IDLE :
24272448
CHARGE_CONTROL_NORMAL);
2449+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
2450+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
2451+
mode_text[val ? CHARGE_CONTROL_IDLE : CHARGE_CONTROL_NORMAL],
2452+
rv);
24282453
if (rv)
24292454
return rv;
24302455
} else if (!strcasecmp(argv[1], "discharge")) {
@@ -2434,6 +2459,10 @@ static int command_chgstate(int argc, const char **argv)
24342459
return EC_ERROR_PARAM2;
24352460
rv = set_chg_ctrl_mode(val ? CHARGE_CONTROL_DISCHARGE :
24362461
CHARGE_CONTROL_NORMAL);
2462+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
2463+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
2464+
mode_text[val ? CHARGE_CONTROL_DISCHARGE : CHARGE_CONTROL_NORMAL],
2465+
rv);
24372466
if (rv)
24382467
return rv;
24392468
} else if (IS_ENABLED(CONFIG_CHARGE_DEBUG) &&

zephyr/program/framework/lotus/src/cpu_power.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ enum clear_reasons {
4040
PROCHOT_CLEAR_REASON_FORCE,
4141
};
4242

43+
extern const char *mode_text[];
44+
4345
/* Update PL for thermal table pmf sheet : slider default */
4446
static void update_os_power_slider(int mode, bool with_dc, int active_mpower)
4547
{
@@ -830,10 +832,18 @@ static void update_safety_power_limit(int active_mpower)
830832
case LEVEL_STOP_CHARGE:
831833
/* stop charging */
832834
if (level_increase) {
833-
set_chg_ctrl_mode(CHARGE_CONTROL_IDLE);
835+
int rv = set_chg_ctrl_mode(CHARGE_CONTROL_IDLE);
836+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
837+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
838+
mode_text[CHARGE_CONTROL_IDLE],
839+
rv);
834840
safety_level++;
835841
} else {
836-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
842+
int rv = set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
843+
CPRINTS("%s: %s control mode to %s, rv=%d", __func__,
844+
rv == EC_SUCCESS ? "Switched" : "Failed to switch",
845+
mode_text[CHARGE_CONTROL_NORMAL],
846+
rv);
837847
if (safety_level > 0)
838848
safety_level--;
839849
}

zephyr/program/framework/src/battery_extender.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ enum battery_extender_stage_t {
4141
BATT_EXTENDER_STAGE_2,
4242
};
4343

44+
extern const char *mode_text[];
45+
4446
static bool batt_extender_disable;
4547
static uint64_t battery_extender_trigger = 5*DAY;
4648
static uint64_t battery_extender_reset = 30*MINUTE;
@@ -77,8 +79,12 @@ int charger_sustainer_percentage(void)
7779
void charger_sustainer_reset(void)
7880
{
7981
old_charger_limit = 0;
80-
battery_sustainer_set(-1, -1);
81-
set_chg_ctrl_mode(CHARGE_CONTROL_NORMAL);
82+
//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);
8288
}
8389

8490
static void battery_percentage_control(void)
@@ -99,7 +105,7 @@ static void battery_percentage_control(void)
99105
if (old_charger_limit != charging_maximum_level) {
100106
old_charger_limit = charging_maximum_level;
101107
battery_sustainer_set(MAX(20, (charging_maximum_level - 5)),
102-
MAX(20, charging_maximum_level));
108+
MAX(25, charging_maximum_level));
103109
}
104110
}
105111

0 commit comments

Comments
 (0)