summaryrefslogtreecommitdiff
path: root/driver/battery
diff options
context:
space:
mode:
Diffstat (limited to 'driver/battery')
-rw-r--r--driver/battery/smart.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/driver/battery/smart.c b/driver/battery/smart.c
index 89a99623af..69a90e72f6 100644
--- a/driver/battery/smart.c
+++ b/driver/battery/smart.c
@@ -20,6 +20,7 @@
#define BATTERY_NO_RESPONSE_TIMEOUT (1000*MSEC)
static int fake_state_of_charge = -1;
+static int fake_temperature = -1;
test_mockable int sb_read(int cmd, int *param)
{
@@ -311,9 +312,14 @@ void battery_get_params(struct batt_params *batt)
struct batt_params batt_new = {0};
int v;
- if (sb_read(SB_TEMPERATURE, &batt_new.temperature))
+ if (sb_read(SB_TEMPERATURE, &batt_new.temperature)
+ && fake_temperature < 0)
batt_new.flags |= BATT_FLAG_BAD_TEMPERATURE;
+ /* If temperature is faked, override with faked data */
+ if (fake_temperature >= 0)
+ batt_new.temperature = fake_temperature;
+
if (sb_read(SB_RELATIVE_STATE_OF_CHARGE, &batt_new.state_of_charge)
&& fake_state_of_charge < 0)
batt_new.flags |= BATT_FLAG_BAD_STATE_OF_CHARGE;
@@ -448,6 +454,29 @@ static int command_battfake(int argc, char **argv)
DECLARE_CONSOLE_COMMAND(battfake, command_battfake,
"percent (-1 = use real level)",
"Set fake battery level");
+
+static int command_batttempfake(int argc, char **argv)
+{
+ char *e;
+ int t;
+
+ if (argc == 2) {
+ t = strtoi(argv[1], &e, 0);
+ if (*e || t < -1 || t > 5000)
+ return EC_ERROR_PARAM1;
+
+ fake_temperature = t;
+ }
+
+ if (fake_temperature >= 0)
+ ccprintf("Fake batt temperature %d.%d K\n",
+ fake_temperature / 10, fake_temperature % 10);
+
+ return EC_SUCCESS;
+}
+DECLARE_CONSOLE_COMMAND(batttempfake, command_batttempfake,
+ "temperature (-1 = use real temperature)",
+ "Set fake battery temperature in deciKelvin (2731 = 273.1 K = 0 deg C)");
#endif
#ifdef CONFIG_CMD_BATT_MFG_ACCESS