summaryrefslogtreecommitdiff
path: root/driver/charger
diff options
context:
space:
mode:
authorKyle Lin <kylelinck@google.com>2022-09-14 09:52:20 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-28 05:19:30 +0000
commit58bb9b518d23617f085b8ef539ac91c36ccc368c (patch)
treed9a74e00372092b07bbc87280147f58ce93353cd /driver/charger
parentab71261010629016885601b6f7553c5ba0c08560 (diff)
downloadchrome-ec-58bb9b518d23617f085b8ef539ac91c36ccc368c.tar.gz
charger: Detect the number of battery cells
The charging mode of SM5803 charger is configured by sensing an external resistors. The number of battery cells can be determined from the charging mode. To support 2S and 3S batteries in one model(project), the number of battery cells should be detected at run time. BUG=b:242477985 BRANCH=none TEST='make buildall' and 'zmake build -a' Change-Id: Icb7af51ab7b3b27a6fb7ad4ac4b8fe87331108fe Signed-off-by: Kyle Lin <kylelinck@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3892078 Code-Coverage: Andrew McRae <amcrae@google.com> Tested-by: Zick Wei <zick.wei@quanta.corp-partner.google.com> Reviewed-by: Andrew McRae <amcrae@google.com> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Commit-Queue: Andrew McRae <amcrae@google.com> Reviewed-by: Zhuohao Lee <zhuohao@chromium.org>
Diffstat (limited to 'driver/charger')
-rw-r--r--driver/charger/sm5803.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c
index b8940cf8ff..a6e178258f 100644
--- a/driver/charger/sm5803.c
+++ b/driver/charger/sm5803.c
@@ -2038,6 +2038,29 @@ static void command_sm5803_dump(int chgnum)
}
#endif /* CONFIG_CMD_CHARGER_DUMP */
+static enum ec_error_list sm5803_get_battery_cells(int chgnum, int *cells)
+{
+ enum ec_error_list rv;
+ uint32_t platform_id;
+
+ rv = main_read8(chgnum, SM5803_REG_PLATFORM, &platform_id);
+ if (rv)
+ return rv;
+
+ platform_id &= SM5803_PLATFORM_ID;
+ if (is_platform_id_2s(platform_id))
+ *cells = 2;
+ else if (is_platform_id_3s(platform_id))
+ *cells = 3;
+ else {
+ *cells = -1;
+
+ return EC_ERROR_UNKNOWN;
+ }
+
+ return EC_SUCCESS;
+}
+
const struct charger_drv sm5803_drv = {
.init = &sm5803_init,
.post_init = &sm5803_post_init,
@@ -2075,4 +2098,5 @@ const struct charger_drv sm5803_drv = {
#ifdef CONFIG_CMD_CHARGER_DUMP
.dump_registers = &command_sm5803_dump,
#endif
+ .get_battery_cells = &sm5803_get_battery_cells,
};