summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce <Bruce.Wan@quantatw.com>2017-03-09 19:52:56 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-03-09 15:54:50 +0000
commit0d4ba5333a0ab58ded46a57a8d2a73f6eb4226f5 (patch)
treed333ff407e017503c9926c63d9b2a526c55c7e63
parent74517e4b11670ba2ea25751dc0a147f17a2e2d39 (diff)
downloadchrome-ec-0d4ba5333a0ab58ded46a57a8d2a73f6eb4226f5.tar.gz
reks: add battery firmware update support
Add battery firmware update support. BUG=b:36048904 BRANCH=reks TEST=check firmware update normally. Change-Id: Ib93e09a64c069a50929934f9916f825c143becc4 Signed-off-by: Bruce.Wan <Bruce.Wan@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/452103 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Commit-Queue: Keith Tzeng <keith.tzeng@quantatw.com> Tested-by: Keith Tzeng <keith.tzeng@quantatw.com>
-rw-r--r--board/reks/board.h5
-rw-r--r--common/charge_state_v2.c8
-rw-r--r--common/smbus.c20
3 files changed, 15 insertions, 18 deletions
diff --git a/board/reks/board.h b/board/reks/board.h
index 08659323d9..38326d7278 100644
--- a/board/reks/board.h
+++ b/board/reks/board.h
@@ -84,6 +84,11 @@
#define I2C_PORT_CHARGER MEC1322_I2C0_0
#define I2C_PORT_THERMAL MEC1322_I2C3
+/* battery firmware update */
+#define CONFIG_CRC8
+#define CONFIG_SB_FIRMWARE_UPDATE
+#define CONFIG_SMBUS
+
/* ADC signal */
enum adc_channel {
/* Number of ADC channels */
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index e62d08fe4b..68e60327dd 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -118,6 +118,7 @@ static int update_static_battery_info(void)
{
char *batt_str;
int batt_serial;
+ char temp[32];
/*
* The return values have type enum ec_error_list, but EC_SUCCESS is
* zero. We'll just look for any failures so we can try them all again.
@@ -146,15 +147,18 @@ static int update_static_battery_info(void)
/* Cycle Count */
rv |= battery_cycle_count((int *)host_get_memmap(EC_MEMMAP_BATT_CCNT));
+ /* TODO(crosbug.com/p/576911): Fix our broken smbus driver */
/* Battery Manufacturer string */
batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_MFGR);
+ battery_manufacturer_name(temp, sizeof(temp));
memset(batt_str, 0, EC_MEMMAP_TEXT_MAX);
- rv |= battery_manufacturer_name(batt_str, EC_MEMMAP_TEXT_MAX);
+ memcpy(batt_str, temp, EC_MEMMAP_TEXT_MAX-1);
/* Battery Model string */
batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_MODEL);
+ battery_device_name(temp, sizeof(temp));
memset(batt_str, 0, EC_MEMMAP_TEXT_MAX);
- rv |= battery_device_name(batt_str, EC_MEMMAP_TEXT_MAX);
+ memcpy(batt_str, temp, EC_MEMMAP_TEXT_MAX-1);
/* Battery Type string */
batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_TYPE);
diff --git a/common/smbus.c b/common/smbus.c
index ea7ece7d59..aaa7401a78 100644
--- a/common/smbus.c
+++ b/common/smbus.c
@@ -57,12 +57,10 @@ static int smbus_if_write(int i2c_port, struct smbus_wr_if *intf,
intf->data[n-1] = crc8((const uint8_t *)intf,
n - 1 + sizeof(struct smbus_wr_if));
i2c_lock(i2c_port, 1);
- rv = i2c_is_busy(i2c_port);
- if (!rv)
- rv = i2c_xfer(i2c_port, intf->slave_addr,
- &intf->smbus_cmd, n + 1, NULL, 0, I2C_XFER_SINGLE);
- else
- rv = EC_ERROR_BUSY;
+
+ rv = i2c_xfer(i2c_port, intf->slave_addr,
+ &intf->smbus_cmd, n + 1, NULL, 0, I2C_XFER_SINGLE);
+
i2c_lock(i2c_port, 0);
if (rv)
CPRINTF("smbus wr i2c_xfer error:%d cmd:%02X n:%d\n",
@@ -93,16 +91,6 @@ static int smbus_if_read(int i2c_port, struct smbus_rd_if *intf,
i2c_lock(i2c_port, 1);
- /* Check if smbus is busy */
- rv = i2c_is_busy(i2c_port);
- if (rv) {
- rv = EC_ERROR_BUSY;
- CPRINTF("smbus_cmd:%02X bus busy error:%d\n",
- intf->smbus_cmd, rv);
- i2c_lock(i2c_port, 0);
- return rv;
- }
-
rv = i2c_xfer(i2c_port, intf->slave_addr,
&(intf->smbus_cmd), 1, intf->data, n, I2C_XFER_SINGLE);