summaryrefslogtreecommitdiff
path: root/common/battery.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/battery.c')
-rw-r--r--common/battery.c91
1 files changed, 50 insertions, 41 deletions
diff --git a/common/battery.c b/common/battery.c
index 01478d5b52..00c9540a1f 100644
--- a/common/battery.c
+++ b/common/battery.c
@@ -1,4 +1,4 @@
-/* Copyright 2012 The Chromium OS Authors. All rights reserved.
+/* Copyright 2012 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
@@ -6,6 +6,7 @@
*/
#include "battery.h"
+#include "battery_fuel_gauge.h"
#include "charge_manager.h"
#include "charge_state.h"
#include "common.h"
@@ -21,8 +22,8 @@
#include "util.h"
#include "watchdog.h"
-#define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args)
-#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ##args)
+#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ##args)
#define CUTOFFPRINTS(info) CPRINTS("%s %s", "Battery cut off", info)
/* See config.h for details */
@@ -77,9 +78,14 @@ static int check_print_error(int rv)
static void print_battery_status(void)
{
- static const char * const st[] = {"EMPTY", "FULL", "DCHG", "INIT",};
- static const char * const al[] = {"RT", "RC", "--", "TD",
- "OT", "--", "TC", "OC"};
+ static const char *const st[] = {
+ "EMPTY",
+ "FULL",
+ "DCHG",
+ "INIT",
+ };
+ static const char *const al[] = { "RT", "RC", "--", "TD",
+ "OT", "--", "TC", "OC" };
int value, i;
@@ -92,12 +98,12 @@ static void print_battery_status(void)
/* bits 4-7 are status */
for (i = 0; i < 4; i++)
- if (value & (1 << (i+4)))
+ if (value & (1 << (i + 4)))
ccprintf(" %s", st[i]);
/* bits 15-8 are alarms */
for (i = 0; i < 8; i++)
- if (value & (1 << (i+8)))
+ if (value & (1 << (i + 8)))
ccprintf(" %s", al[i]);
ccprintf("\n");
@@ -138,10 +144,8 @@ static void print_battery_params(void)
ccprintf("%08x\n", batt->flags);
print_item_name("Temp:");
- ccprintf("0x%04x = %.1d K (%.1d C)\n",
- batt->temperature,
- batt->temperature,
- batt->temperature - 2731);
+ ccprintf("0x%04x = %.1d K (%.1d C)\n", batt->temperature,
+ batt->temperature, batt->temperature - 2731);
print_item_name("V:");
ccprintf("0x%04x = %d mV\n", batt->voltage, batt->voltage);
@@ -167,7 +171,7 @@ static void print_battery_params(void)
batt->flags & BATT_FLAG_WANT_CHARGE ? "" : "Not ");
print_item_name("Charge:");
- ccprintf("%d %%\n", batt->state_of_charge);
+ ccprintf("%d %%\n", batt->state_of_charge);
if (IS_ENABLED(CONFIG_CHARGER)) {
int value;
@@ -214,10 +218,10 @@ static void print_battery_info(void)
print_item_name("Time-full:");
if (check_print_error(battery_time_to_full(&value))) {
if (value == 65535) {
- hour = 0;
+ hour = 0;
minute = 0;
} else {
- hour = value / 60;
+ hour = value / 60;
minute = value % 60;
}
ccprintf("%dh:%d\n", hour, minute);
@@ -226,10 +230,10 @@ static void print_battery_info(void)
print_item_name(" Empty:");
if (check_print_error(battery_time_to_empty(&value))) {
if (value == 65535) {
- hour = 0;
+ hour = 0;
minute = 0;
} else {
- hour = value / 60;
+ hour = value / 60;
minute = value % 60;
}
ccprintf("%dh:%d\n", hour, minute);
@@ -240,6 +244,15 @@ static void print_battery_info(void)
print_item_name("shutdown_soc:");
ccprintf("%d %%\n", batt_host_shutdown_pct);
+
+#ifdef CONFIG_BATTERY_FUEL_GAUGE
+ value = battery_is_charge_fet_disabled();
+ /* reverse the flag if no error */
+ if (value != -1)
+ value = !value;
+ print_item_name("C-FET:");
+ ccprintf("%d\n", value);
+#endif
}
void print_battery_debug(void)
@@ -250,7 +263,7 @@ void print_battery_debug(void)
print_battery_info();
}
-static int command_battery(int argc, char **argv)
+static int command_battery(int argc, const char **argv)
{
int repeat = 1;
int loop;
@@ -289,8 +302,7 @@ static int command_battery(int argc, char **argv)
return EC_SUCCESS;
}
-DECLARE_CONSOLE_COMMAND(battery, command_battery,
- "<repeat_count> <sleep_ms>",
+DECLARE_CONSOLE_COMMAND(battery, command_battery, "<repeat_count> <sleep_ms>",
"Print battery info");
#ifdef CONFIG_BATTERY_CUT_OFF
@@ -349,7 +361,7 @@ static enum ec_status battery_command_cutoff(struct host_cmd_handler_args *args)
return rv;
}
DECLARE_HOST_COMMAND(EC_CMD_BATTERY_CUT_OFF, battery_command_cutoff,
- EC_VER_MASK(0) | EC_VER_MASK(1));
+ EC_VER_MASK(0) | EC_VER_MASK(1));
static void check_pending_cutoff(void)
{
@@ -362,7 +374,7 @@ static void check_pending_cutoff(void)
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, check_pending_cutoff, HOOK_PRIO_LAST);
-static int command_cutoff(int argc, char **argv)
+static int command_cutoff(int argc, const char **argv)
{
int rv;
@@ -384,15 +396,14 @@ static int command_cutoff(int argc, char **argv)
return EC_ERROR_UNKNOWN;
}
-DECLARE_CONSOLE_COMMAND(cutoff, command_cutoff,
- "[at-shutdown]",
- "Cut off the battery output");
+DECLARE_CONSOLE_COMMAND(cutoff, command_cutoff, "[at-shutdown]",
+ "Cut off the battery output");
#else
int battery_is_cut_off(void)
{
- return 0; /* Always return NOT cut off */
+ return 0; /* Always return NOT cut off */
}
-#endif /* CONFIG_BATTERY_CUT_OFF */
+#endif /* CONFIG_BATTERY_CUT_OFF */
#ifdef CONFIG_BATTERY_VENDOR_PARAM
__overridable int battery_get_vendor_param(uint32_t param, uint32_t *value)
@@ -427,7 +438,7 @@ __overridable int battery_set_vendor_param(uint32_t param, uint32_t value)
return EC_ERROR_UNIMPLEMENTED;
}
-static int console_command_battery_vendor_param(int argc, char **argv)
+static int console_command_battery_vendor_param(int argc, const char **argv)
{
uint32_t param;
uint32_t value;
@@ -488,11 +499,9 @@ host_command_battery_vendor_param(struct host_cmd_handler_args *args)
return rv;
}
DECLARE_HOST_COMMAND(EC_CMD_BATTERY_VENDOR_PARAM,
- host_command_battery_vendor_param,
- EC_VER_MASK(0));
+ host_command_battery_vendor_param, EC_VER_MASK(0));
#endif /* CONFIG_BATTERY_VENDOR_PARAM */
-
void battery_compensate_params(struct batt_params *batt)
{
int numer, denom;
@@ -500,7 +509,7 @@ void battery_compensate_params(struct batt_params *batt)
int full = batt->full_capacity;
if ((batt->flags & BATT_FLAG_BAD_FULL_CAPACITY) ||
- (batt->flags & BATT_FLAG_BAD_REMAINING_CAPACITY))
+ (batt->flags & BATT_FLAG_BAD_REMAINING_CAPACITY))
return;
if (*remain <= 0 || full <= 0)
@@ -589,20 +598,21 @@ __overridable enum battery_disconnect_state battery_get_disconnect_state(void)
#ifdef CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV
#if CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV < 5000 || \
- CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV >= PD_MAX_VOLTAGE_MV
- #error "Voltage limit must be between 5000 and PD_MAX_VOLTAGE_MV"
+ CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV >= PD_MAX_VOLTAGE_MV
+#error "Voltage limit must be between 5000 and PD_MAX_VOLTAGE_MV"
#endif
#if !((defined(CONFIG_USB_PD_TCPMV1) && defined(CONFIG_USB_PD_DUAL_ROLE)) || \
- (defined(CONFIG_USB_PD_TCPMV2) && defined(CONFIG_USB_PE_SM)))
- #error "Voltage reducing requires TCPM with Policy Engine"
+ (defined(CONFIG_USB_PD_TCPMV2) && defined(CONFIG_USB_PE_SM)))
+#error "Voltage reducing requires TCPM with Policy Engine"
#endif
/*
* Returns true if input voltage should be reduced (chipset is in S5/G3) and
* battery is full, otherwise returns false
*/
-static bool board_wants_reduced_input_voltage(void) {
+static bool board_wants_reduced_input_voltage(void)
+{
struct batt_params batt;
/* Chipset not in S5/G3, so we don't want to reduce voltage */
@@ -638,7 +648,7 @@ static void reduce_input_voltage_when_full(void)
CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV) {
saved_input_voltage = max_pd_voltage_mv;
max_pd_voltage_mv =
- CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV;
+ CONFIG_BATT_FULL_CHIPSET_OFF_INPUT_LIMIT_MV;
}
} else if (saved_input_voltage != -1) {
/*
@@ -656,8 +666,7 @@ static void reduce_input_voltage_when_full(void)
if (pd_get_max_voltage() != max_pd_voltage_mv)
pd_set_external_voltage_limit(port, max_pd_voltage_mv);
}
-DECLARE_HOOK(HOOK_AC_CHANGE, reduce_input_voltage_when_full,
- HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_AC_CHANGE, reduce_input_voltage_when_full, HOOK_PRIO_DEFAULT);
DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, reduce_input_voltage_when_full,
HOOK_PRIO_DEFAULT);
DECLARE_HOOK(HOOK_CHIPSET_STARTUP, reduce_input_voltage_when_full,
@@ -677,7 +686,7 @@ void battery_validate_params(struct batt_params *batt)
*/
if (batt->temperature > CELSIUS_TO_DECI_KELVIN(5660)) {
CPRINTS("ignoring ridiculous batt.temp of %dC",
- DECI_KELVIN_TO_CELSIUS(batt->temperature));
+ DECI_KELVIN_TO_CELSIUS(batt->temperature));
batt->flags |= BATT_FLAG_BAD_TEMPERATURE;
}