summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2019-07-30 17:02:15 +0800
committerCommit Bot <commit-bot@chromium.org>2019-07-31 13:01:47 +0000
commit9dbf748033d8ce9f5038c9f98409abac50b3759d (patch)
treefe75809d34da9879a1498728f5665887f5c3af5c
parentec315b1aebb015d39f6d6c3bac25e331c77c0429 (diff)
downloadchrome-ec-9dbf748033d8ce9f5038c9f98409abac50b3759d.tar.gz
baseboard/kukui: add smart battery
Add a smart battery for implementation Kodama and Jacuzzi. BUG=b:137172860 TEST=boot on a jacuzzi, verify that `battery` command looks good BRANCH=master Change-Id: Ifdaf3c700ea9dccb7f60a266395644daec4eab2f Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1725387 Tested-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Alexandru M Stan <amstan@chromium.org>
-rw-r--r--baseboard/kukui/baseboard.h3
-rw-r--r--baseboard/kukui/battery_smart.c112
-rw-r--r--baseboard/kukui/build.mk1
3 files changed, 116 insertions, 0 deletions
diff --git a/baseboard/kukui/baseboard.h b/baseboard/kukui/baseboard.h
index b1da5368bf..3499ced3df 100644
--- a/baseboard/kukui/baseboard.h
+++ b/baseboard/kukui/baseboard.h
@@ -12,6 +12,7 @@
* Variant battery defines, pick one:
* VARIANT_KUKUI_BATTERY_MAX17055
* VARIANT_KUKUI_BATTERY_MM8013
+ * VARIANT_KUKUI_BATTERY_SMART
*/
#if defined(VARIANT_KUKUI_BATTERY_MAX17055)
#define CONFIG_BATTERY_MAX17055
@@ -19,6 +20,8 @@
#define BATTERY_MAX17055_RSENSE 5 /* m-ohm */
#elif defined(VARIANT_KUKUI_BATTERY_MM8013)
#define CONFIG_BATTERY_MM8013
+#elif defined(VARIANT_KUKUI_BATTERY_SMART)
+#define CONFIG_BATTERY_SMART
#else
#error Must define a VARIANT_KUKUI_BATTERY
#endif /* VARIANT_KUKUI_BATTERY */
diff --git a/baseboard/kukui/battery_smart.c b/baseboard/kukui/battery_smart.c
new file mode 100644
index 0000000000..93fa215326
--- /dev/null
+++ b/baseboard/kukui/battery_smart.c
@@ -0,0 +1,112 @@
+/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Battery pack vendor provided charging profile
+ */
+
+#include "battery.h"
+#include "battery_fuel_gauge.h"
+#include "battery_smart.h"
+#include "gpio.h"
+#include "system.h"
+
+static enum battery_present batt_pres_prev = BP_NOT_SURE;
+
+/* Shutdown mode parameter to write to manufacturer access register */
+#define SB_SHIP_MODE_REG SB_MANUFACTURER_ACCESS
+#define SB_SHUTDOWN_DATA 0x0010
+
+static const struct battery_info info = {
+ .voltage_max = 13200,
+ .voltage_normal = 11580,
+ .voltage_min = 9000,
+ .precharge_current = 256,
+ .start_charging_min_c = 0,
+ .start_charging_max_c = 45,
+ .charging_min_c = 0,
+ .charging_max_c = 60,
+ .discharging_min_c = -20,
+ .discharging_max_c = 60,
+};
+
+const struct battery_info *battery_get_info(void)
+{
+ return &info;
+}
+
+enum battery_disconnect_state battery_get_disconnect_state(void)
+{
+ if (battery_is_present() == BP_YES)
+ return BATTERY_NOT_DISCONNECTED;
+ return BATTERY_DISCONNECTED;
+}
+
+enum battery_present battery_hw_present(void)
+{
+ return gpio_get_level(GPIO_EC_BATT_PRES_ODL) ? BP_NO : BP_YES;
+}
+
+static int battery_init(void)
+{
+ int batt_status;
+
+ return battery_status(&batt_status) ? 0 :
+ !!(batt_status & STATUS_INITIALIZED);
+}
+
+/*
+ * Physical detection of battery.
+ */
+static enum battery_present battery_check_present_status(void)
+{
+ enum battery_present batt_pres;
+
+ /* Get the physical hardware status */
+ batt_pres = battery_hw_present();
+
+ /*
+ * If the battery is not physically connected, then no need to perform
+ * any more checks.
+ */
+ if (batt_pres != BP_YES)
+ return batt_pres;
+
+ /*
+ * If the battery is present now and was present last time we checked,
+ * return early.
+ */
+ if (batt_pres == batt_pres_prev)
+ return batt_pres;
+
+ /*
+ * Ensure that battery is:
+ * 1. Not in cutoff
+ * 2. Initialized
+ */
+ if (battery_is_cut_off() != BATTERY_CUTOFF_STATE_NORMAL ||
+ battery_init() == 0) {
+ batt_pres = BP_NO;
+ }
+
+ return batt_pres;
+}
+
+enum battery_present battery_is_present(void)
+{
+ batt_pres_prev = battery_check_present_status();
+ return batt_pres_prev;
+}
+
+int board_cut_off_battery(void)
+{
+ int rv;
+
+ /* Ship mode command must be sent twice to take effect */
+ rv = sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA);
+
+ if (rv != EC_SUCCESS)
+ return rv;
+
+ return sb_write(SB_SHIP_MODE_REG, SB_SHUTDOWN_DATA);
+}
diff --git a/baseboard/kukui/build.mk b/baseboard/kukui/build.mk
index af328fc2ab..465df10aa9 100644
--- a/baseboard/kukui/build.mk
+++ b/baseboard/kukui/build.mk
@@ -12,6 +12,7 @@ baseboard-$(CONFIG_BOOTBLOCK)+=emmc.o
baseboard-$(VARIANT_KUKUI_BATTERY_MAX17055)+=battery_max17055.o
baseboard-$(VARIANT_KUKUI_BATTERY_MM8013)+=battery_mm8013.o
+baseboard-$(VARIANT_KUKUI_BATTERY_SMART)+=battery_smart.o
baseboard-$(VARIANT_KUKUI_CHARGER_MT6370)+=charger_mt6370.o