diff options
author | David Huang <david.huang@quanta.corp-partner.google.com> | 2020-07-02 17:05:26 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-04 08:07:05 +0000 |
commit | c23554b473e8a9d772f55533bbf72c072c888828 (patch) | |
tree | 71cd1ff59658ffc4b2555011d1a73c6208ccf07b /board/magolor/battery.c | |
parent | 5a8b1535c20dfc1e6e1bdfdf9f1626b915fd9e43 (diff) | |
download | chrome-ec-c23554b473e8a9d772f55533bbf72c072c888828.tar.gz |
magolor: Initial EC image
Create the initial EC image for the magolor variant by copying the
waddledoo reference board EC files into a new directory named for
the variant.
(Auto-Generated by create_initial_ec_image.sh version 1.0.3).
BUG=b:158540772
BRANCH=none
TEST=make BOARD=magolor
Signed-off-by: David Huang <david.huang@quanta.corp-partner.google.com>
Change-Id: I80adc8e100b2cad84a82a487075f3cb37d312160
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2278796
Commit-Queue: Henry Sun <henrysun@google.com>
Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org>
Diffstat (limited to 'board/magolor/battery.c')
-rw-r--r-- | board/magolor/battery.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/board/magolor/battery.c b/board/magolor/battery.c new file mode 100644 index 0000000000..7f82bcb95f --- /dev/null +++ b/board/magolor/battery.c @@ -0,0 +1,86 @@ +/* Copyright 2020 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 information + */ + +#include "battery.h" +#include "battery_smart.h" +#include "common.h" +#include "ec_commands.h" +#include "extpower.h" + +/* Shutdown mode parameter to write to manufacturer access register */ +#define SB_SHUTDOWN_DATA 0x0010 + +/* Battery info */ +static const struct battery_info info = { + .voltage_max = 8880, + .voltage_normal = 7700, + .voltage_min = 6000, + .precharge_current = 160, + .start_charging_min_c = 0, + .start_charging_max_c = 45, + .charging_min_c = 0, + .charging_max_c = 45, + .discharging_min_c = -20, + .discharging_max_c = 60, +}; + +const struct battery_info *battery_get_info(void) +{ + return &info; +} + +int board_cut_off_battery(void) +{ + int rv; + + /* Ship mode command must be sent twice to take effect */ + rv = sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA); + if (rv != EC_SUCCESS) + return EC_RES_ERROR; + + rv = sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA); + return rv ? EC_RES_ERROR : EC_RES_SUCCESS; +} + +enum battery_disconnect_state battery_get_disconnect_state(void) +{ + uint8_t data[6]; + int rv; + + /* + * Take note if we find that the battery isn't in disconnect state, + * and always return NOT_DISCONNECTED without probing the battery. + * This assumes the battery will not go to disconnect state during + * runtime. + */ + static int not_disconnected; + + if (not_disconnected) + return BATTERY_NOT_DISCONNECTED; + + /* Check if battery discharge FET is disabled. */ + rv = sb_read_mfgacc(PARAM_OPERATION_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); + if (rv) + return BATTERY_DISCONNECT_ERROR; + if (~data[3] & (BATTERY_DISCHARGING_DISABLED)) { + not_disconnected = 1; + return BATTERY_NOT_DISCONNECTED; + } + + /* + * Battery discharge FET is disabled. Verify that we didn't enter this + * state due to a safety fault. + */ + rv = sb_read_mfgacc(PARAM_SAFETY_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); + if (rv || data[2] || data[3] || data[4] || data[5]) + return BATTERY_DISCONNECT_ERROR; + + /* No safety fault, battery is disconnected */ + return BATTERY_DISCONNECTED; +} |