diff options
author | Ben Chen <Ben.chen2@quantatw.com> | 2018-06-26 15:56:02 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-06-27 05:30:33 +0000 |
commit | 6f4cfb9dfbbb610b94c4218f77b08f8b12a50229 (patch) | |
tree | fabf1bb4d9d834ed283b5133b28206583f5d945c | |
parent | f94850c8e244cb6eafb92c2b73347e4a014e06ab (diff) | |
download | chrome-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.c | 6 | ||||
-rw-r--r-- | driver/battery/samus.c | 6 | ||||
-rw-r--r-- | driver/battery/smart.c | 51 | ||||
-rw-r--r-- | include/battery_smart.h | 6 |
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 */ |