summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chen <Ben.chen2@quantatw.com>2018-06-26 15:56:02 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-06-27 05:30:33 +0000
commit6f4cfb9dfbbb610b94c4218f77b08f8b12a50229 (patch)
treefabf1bb4d9d834ed283b5133b28206583f5d945c
parentf94850c8e244cb6eafb92c2b73347e4a014e06ab (diff)
downloadchrome-ec-6f4cfb9dfbbb610b94c4218f77b08f8b12a50229.tar.gz
smart_battery:Cleanup smart battery & SB users code
reference patch: 422998 BUG=b:70698631 BRANCH=glados TEST=Manually teseted on Lars. Battery info works. Change-Id: I1d8fa98d2ea7a9ad788fc4a354eb7f3c96d1552d Signed-off-by: Ben Chen <Ben.Chen2@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/1114536 Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r--board/caroline/battery.c6
-rw-r--r--driver/battery/samus.c6
-rw-r--r--driver/battery/smart.c51
-rw-r--r--include/battery_smart.h6
4 files changed, 47 insertions, 22 deletions
diff --git a/board/caroline/battery.c b/board/caroline/battery.c
index 3b13680fa7..6c2bd4f4f8 100644
--- a/board/caroline/battery.c
+++ b/board/caroline/battery.c
@@ -69,8 +69,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
if (rv)
return BATTERY_DISCONNECT_ERROR;
- rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_ALT_MANUFACTURER_ACCESS, data, 6);
+ rv = sb_read_string(SB_ALT_MANUFACTURER_ACCESS, data, 6);
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
BATTERY_CHARGING_DISABLED))) {
@@ -86,8 +85,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
if (rv)
return BATTERY_DISCONNECT_ERROR;
- rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_ALT_MANUFACTURER_ACCESS, data, 6);
+ rv = sb_read_string(SB_ALT_MANUFACTURER_ACCESS, data, 6);
if (rv || data[2] || data[3] || data[4] || data[5])
return BATTERY_DISCONNECT_ERROR;
diff --git a/driver/battery/samus.c b/driver/battery/samus.c
index bd334d08c8..b0dffeebc7 100644
--- a/driver/battery/samus.c
+++ b/driver/battery/samus.c
@@ -255,8 +255,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
if (rv)
return BATTERY_DISCONNECT_ERROR;
- rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_ALT_MANUFACTURER_ACCESS, data, 6);
+ rv = sb_read_string(SB_ALT_MANUFACTURER_ACCESS, data, 6);
if (rv || !(data[3] & BATTERY_DISCHARGING_DISABLED) ||
!(data[3] & BATTERY_CHARGING_DISABLED)) {
@@ -272,8 +271,7 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
if (rv)
return BATTERY_DISCONNECT_ERROR;
- rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_ALT_MANUFACTURER_ACCESS, data, 6);
+ rv = sb_read_string(SB_ALT_MANUFACTURER_ACCESS, data, 6);
if (rv || data[2] || data[3] || data[4] || data[5])
return BATTERY_DISCONNECT_ERROR;
diff --git a/driver/battery/smart.c b/driver/battery/smart.c
index 37204b983c..c4af9d1d54 100644
--- a/driver/battery/smart.c
+++ b/driver/battery/smart.c
@@ -84,8 +84,7 @@ static int validate_string(uint8_t *data)
}
#endif
-int sb_read_string(int port, int slave_addr, int offset, uint8_t *data,
- int len)
+int sb_read_string(int offset, uint8_t *data, int len)
{
int rv;
@@ -97,9 +96,11 @@ int sb_read_string(int port, int slave_addr, int offset, uint8_t *data,
return EC_RES_ACCESS_DENIED;
#endif
#ifdef CONFIG_SMBUS
- rv = smbus_read_string(port, slave_addr, offset, data, len);
+ rv = smbus_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
+ offset, data, len);
#else
- rv = i2c_read_string(port, slave_addr, offset, data, len);
+ rv = i2c_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
+ offset, data, len);
#endif
#ifdef CONFIG_BATTERY_VALIDATE_STRINGS
if (rv == EC_SUCCESS)
@@ -109,6 +110,36 @@ int sb_read_string(int port, int slave_addr, int offset, uint8_t *data,
return rv;
}
+int sb_read_mfgacc(int cmd, int block, uint8_t *data, int len)
+{
+ int rv;
+
+ /*
+ *First two bytes returned from read are command sent hence read
+ *doesn't yield anything if the length is less than 3 bytes.
+ */
+ if (len < 3)
+ return EC_ERROR_INVAL;
+
+ /* Send manufactureraccess command */
+ rv = sb_write(SB_MANUFACTURER_ACCESS, cmd);
+ if (rv)
+ return rv;
+
+ /*
+ *Read data on the register block.
+ *First two bytes returned are command sent,
+ *rest are actual data LSB to MSB
+ */
+ rv = sb_read_string(block, data, len);
+ if (rv)
+ return rv;
+ if ((data[0] | data[1] << 8) != cmd)
+ return EC_ERROR_UNKNOWN;
+
+ return EC_SUCCESS;
+}
+
int battery_get_mode(int *mode)
{
return sb_read(SB_BATTERY_MODE, mode);
@@ -269,22 +300,19 @@ test_mockable int battery_manufacture_date(int *year, int *month, int *day)
/* Read manufacturer name */
test_mockable int battery_manufacturer_name(char *dest, int size)
{
- return sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_MANUFACTURER_NAME, dest, size);
+ return sb_read_string(SB_MANUFACTURER_NAME, dest, size);
}
/* Read device name */
test_mockable int battery_device_name(char *dest, int size)
{
- return sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_DEVICE_NAME, dest, size);
+ return sb_read_string(SB_DEVICE_NAME, dest, size);
}
/* Read battery type/chemistry */
test_mockable int battery_device_chemistry(char *dest, int size)
{
- return sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
- SB_DEVICE_CHEMISTRY, dest, size);
+ return sb_read_string(SB_DEVICE_CHEMISTRY, dest, size);
}
void battery_get_params(struct batt_params *batt)
@@ -476,8 +504,7 @@ static int host_command_sb_read_block(struct host_cmd_handler_args *args)
(p->reg != SB_DEVICE_CHEMISTRY) &&
(p->reg != SB_MANUFACTURER_DATA))
return EC_RES_INVALID_PARAM;
- rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR, p->reg,
- r->data, 32);
+ rv = sb_read_string(p->reg, r->data, 32);
if (rv)
return EC_RES_ERROR;
diff --git a/include/battery_smart.h b/include/battery_smart.h
index c5fd1d6eec..48ed0ac8e9 100644
--- a/include/battery_smart.h
+++ b/include/battery_smart.h
@@ -147,11 +147,13 @@ int sbc_write(int cmd, int param);
int sb_read(int cmd, int *param);
/* Read sequence from battery */
-int sb_read_string(int port, int slave_addr, int offset, uint8_t *data,
- int len);
+int sb_read_string(int offset, uint8_t *data, int len);
/* Write to battery */
int sb_write(int cmd, int param);
+/* Read manufactures access data from the batter */
+int sb_read_mfgacc(int cmd, int block, uint8_t *data, int len);
+
#endif /* __CROS_EC_BATTERY_SMART_H */