1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-23 15:08:19 +00:00

fix(core): remove charging enable hysteresis when 100% SOC limit is set

[no changelog]
This commit is contained in:
tychovrahe 2025-06-16 11:42:11 +02:00 committed by TychoVrahe
parent 41c361babb
commit dc0877a70d

View File

@ -98,7 +98,7 @@ void pm_monitor_power_sources(void) {
fuel_gauge_set_soc(&drv->fuel_gauge, 1.0f, drv->fuel_gauge.P);
}
// Ceil the float soc to user friendly integer
// Ceil the float soc to user-friendly integer
uint8_t soc_ceiled_temp = (int)(drv->fuel_gauge.soc_latched * 100 + 0.999f);
if (soc_ceiled_temp != drv->soc_ceiled) {
drv->soc_ceiled = soc_ceiled_temp;
@ -162,7 +162,7 @@ void pm_charging_controller(pm_driver_t* drv) {
} else if (drv->wireless_connected) {
// Wireless charger is sensitive to large current steps, so we need to
// controll the charging current in steps.
// control the charging current in steps.
if (ticks_expired(drv->charging_step_timeout_ms)) {
if (drv->charging_current_target_ma <
drv->charging_current_max_limit_ma) {
@ -190,9 +190,10 @@ void pm_charging_controller(pm_driver_t* drv) {
pmic_set_charging_limit(drv->charging_current_target_ma);
}
if (drv->soc_ceiled >= drv->soc_limit) {
if ((drv->soc_ceiled >= drv->soc_limit) && (drv->soc_limit != 100)) {
drv->soc_limit_reached = true;
} else if (drv->soc_ceiled < drv->soc_limit - PM_SOC_LIMIT_HYSTERESIS) {
} else if ((drv->soc_limit == 100) ||
(drv->soc_ceiled < (drv->soc_limit - PM_SOC_LIMIT_HYSTERESIS))) {
drv->soc_limit_reached = false;
}