summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2020-09-25 13:42:38 -0700
committerCommit Bot <commit-bot@chromium.org>2020-10-03 04:31:45 +0000
commit1221ccf2a9b6ecd3e531a91ba734d82a3cd8ed49 (patch)
tree989652f6e41efc8c127e83591ca8a37839779973
parent8df33deec683a2074cff998debfc431942247624 (diff)
downloadchrome-ec-1221ccf2a9b6ecd3e531a91ba734d82a3cd8ed49.tar.gz
Battery: Apply faked state of charge to remaining capacity
Currently, only the state of charge is modified by battfake command. This patch applies the faked state of charge to the remaining capacity as well. BUG=b:163721887 BRANCH=Octopus TEST=Verified Fleex wakes up host on BATTERY_LEVEL_CRITICAL. TEST=Verified powerd reports faked state of charge. Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Change-Id: I34eb409bab129804a983abbe2a1d021298ce044e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2432865 Reviewed-by: Todd Broch <tbroch@chromium.org> (cherry picked from commit f366710eb8076fb45609ca4a3878cf6f7796c1e5) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2447310
-rw-r--r--driver/battery/smart.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/driver/battery/smart.c b/driver/battery/smart.c
index f06da84e9f..9a4a24e55d 100644
--- a/driver/battery/smart.c
+++ b/driver/battery/smart.c
@@ -322,6 +322,24 @@ int battery_get_avg_voltage(void)
}
#endif /* CONFIG_CMD_PWR_AVG */
+static void apply_fake_state_of_charge(struct batt_params *batt)
+{
+ int full;
+
+ if (fake_state_of_charge < 0)
+ return;
+
+ if (batt->flags & BATT_FLAG_BAD_FULL_CAPACITY)
+ battery_design_capacity(&full);
+ else
+ full = batt->full_capacity;
+
+ batt->state_of_charge = fake_state_of_charge;
+ batt->remaining_capacity = full * fake_state_of_charge / 100;
+ batt->flags &= ~BATT_FLAG_BAD_STATE_OF_CHARGE;
+ batt->flags &= ~BATT_FLAG_BAD_REMAINING_CAPACITY;
+}
+
void battery_get_params(struct batt_params *batt)
{
struct batt_params batt_new = {0};
@@ -334,10 +352,6 @@ void battery_get_params(struct batt_params *batt)
&& fake_state_of_charge < 0)
batt_new.flags |= BATT_FLAG_BAD_STATE_OF_CHARGE;
- /* If soc is faked, override with faked data */
- if (fake_state_of_charge >= 0)
- batt_new.state_of_charge = fake_state_of_charge;
-
if (sb_read(SB_VOLTAGE, &batt_new.voltage))
batt_new.flags |= BATT_FLAG_BAD_VOLTAGE;
@@ -416,6 +430,9 @@ void battery_get_params(struct batt_params *batt)
battery_compensate_params(&batt_new);
#endif
+ if (IS_ENABLED(CONFIG_CMD_BATTFAKE))
+ apply_fake_state_of_charge(&batt_new);
+
/* Update visible battery parameters */
memcpy(batt, &batt_new, sizeof(*batt));
}
@@ -456,8 +473,7 @@ static int command_battfake(int argc, char **argv)
}
if (fake_state_of_charge >= 0)
- ccprintf("Fake batt %d%%\n",
- fake_state_of_charge);
+ ccprintf("Fake batt %d%%\n", fake_state_of_charge);
return EC_SUCCESS;
}