summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIkjoon Jang <ikjn@chromium.org>2021-03-11 14:46:51 +0800
committerCommit Bot <commit-bot@chromium.org>2021-09-11 01:20:00 +0000
commitf641fb39a434d7ec2dd5d26c0803606dccbfc2a6 (patch)
treee521ff5f568dbb9cb0482f1eff57778ca467a731
parent12266aa3326520452f6754a075c39dd5c0e823ea (diff)
downloadchrome-ec-firmware-scarlet-10388.B.tar.gz
virtual_battery: bug fix in reading SB_AVERAGE_CURRENTfirmware-scarlet-10388.B
Fix a bug from CL:2747559, virtual battery returns an error for SB_AVERAGE_CURRENT. virtual battery handler should call battery_get_avg_current(), not battery_get_avg_voltage(). BRANCH=none BUG=b:170921599 TEST=read current_avg knob in kukui Signed-off-by: Ikjoon Jang <ikjn@chromium.org> Change-Id: I90c26a8e1d4fa6faccc0166b9f7b63fca9baef51 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2751320 Reviewed-by: Ting Shen <phoenixshen@chromium.org> (cherry picked from commit ffbc67dcac2d03bc5967627ebd9dba37e7013e5a) Conflicts: include/battery.h [skip over the bit for missing BATT_FLAG_IMBALANCED_CELL] Change-Id: I98f2e9d8c6004abf148da78bb6e965a4f9f66964 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3154566 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Commit-Queue: Brian Norris <briannorris@chromium.org> Tested-by: Brian Norris <briannorris@chromium.org>
-rw-r--r--common/virtual_battery.c6
-rw-r--r--driver/battery/smart.c4
-rw-r--r--include/battery.h3
3 files changed, 8 insertions, 5 deletions
diff --git a/common/virtual_battery.c b/common/virtual_battery.c
index c2ebd35afd..1caef535f6 100644
--- a/common/virtual_battery.c
+++ b/common/virtual_battery.c
@@ -246,9 +246,9 @@ int virtual_battery_operation(const uint8_t *batt_cmd_head,
break;
case SB_AVERAGE_CURRENT:
/* This may cause an i2c transaction */
- val = battery_get_avg_voltage();
- if (val < 0)
- return val;
+ if (curr_batt->flags & BATT_FLAG_BAD_AVERAGE_CURRENT)
+ return EC_ERROR_BUSY;
+ val = battery_get_avg_current();
memcpy(dest, &val, bounded_read_len);
break;
case SB_MAX_ERROR:
diff --git a/driver/battery/smart.c b/driver/battery/smart.c
index 2c67de9030..b2ce08e782 100644
--- a/driver/battery/smart.c
+++ b/driver/battery/smart.c
@@ -283,7 +283,6 @@ test_mockable int battery_device_chemistry(char *dest, int size)
return sb_read_string(SB_DEVICE_CHEMISTRY, dest, size);
}
-#ifdef CONFIG_CMD_PWR_AVG
int battery_get_avg_current(void)
{
int current;
@@ -293,6 +292,7 @@ int battery_get_avg_current(void)
return (int16_t)current;
}
+#ifdef CONFIG_CMD_PWR_AVG
/*
* Technically returns only the instantaneous reading, but tests showed that
* for the majority of charge states above 3% this varies by less than 40mV
@@ -332,6 +332,8 @@ void battery_get_params(struct batt_params *batt)
else
batt_new.current = (int16_t)v;
+ if (sb_read(SB_AVERAGE_CURRENT, &v))
+ batt_new.flags |= BATT_FLAG_BAD_AVERAGE_CURRENT;
if (sb_read(SB_CHARGING_VOLTAGE, &batt_new.desired_voltage))
batt_new.flags |= BATT_FLAG_BAD_DESIRED_VOLTAGE;
diff --git a/include/battery.h b/include/battery.h
index ccf61f4ec0..ebf79102fa 100644
--- a/include/battery.h
+++ b/include/battery.h
@@ -116,8 +116,9 @@ int battery_get_avg_voltage(void); /* in mV */
#define BATT_FLAG_BAD_REMAINING_CAPACITY 0x00000100
#define BATT_FLAG_BAD_FULL_CAPACITY 0x00000200
#define BATT_FLAG_BAD_STATUS 0x00000400
+#define BATT_FLAG_BAD_AVERAGE_CURRENT 0x00001000
/* All of the above BATT_FLAG_BAD_* bits */
-#define BATT_FLAG_BAD_ANY 0x000007fc
+#define BATT_FLAG_BAD_ANY 0x000017fc
/* Battery constants */
struct battery_info {