mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 02:04:55 +00:00
smart_battery: Cleanup smart battery & SB users code
BUG=chrome-os-partner:61173 BRANCH=none TEST=Manually tested on Reef. Battery info works. Change-Id: I6e867eee38885186f8e63a934f52e826f0cf72fd Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com> Reviewed-on: https://chromium-review.googlesource.com/422998 Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com> Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
18bb7c7971
commit
66ea614158
@@ -66,16 +66,13 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS,
|
||||
PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED))) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -84,13 +81,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
|
||||
@@ -80,15 +80,12 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED))) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -97,13 +94,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
|
||||
@@ -159,16 +159,12 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS,
|
||||
PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED))) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -177,13 +173,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
|
||||
@@ -371,16 +371,12 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS,
|
||||
PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED))) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -389,13 +385,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
|
||||
@@ -250,15 +250,12 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || !(data[3] & BATTERY_DISCHARGING_DISABLED) ||
|
||||
!(data[3] & BATTERY_CHARGING_DISABLED)) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -267,13 +264,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
else
|
||||
|
||||
@@ -87,16 +87,12 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
|
||||
if (extpower_is_present()) {
|
||||
/* Check if battery charging + discharging is disabled. */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS,
|
||||
PARAM_OPERATION_STATUS);
|
||||
rv = sb_read_mfgacc(PARAM_OPERATION_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED))) {
|
||||
if (~data[3] & (BATTERY_DISCHARGING_DISABLED |
|
||||
BATTERY_CHARGING_DISABLED)) {
|
||||
not_disconnected = 1;
|
||||
return BATTERY_NOT_DISCONNECTED;
|
||||
}
|
||||
@@ -105,13 +101,8 @@ enum battery_disconnect_state battery_get_disconnect_state(void)
|
||||
* Battery is neither charging nor discharging. Verify that
|
||||
* we didn't enter this state due to a safety fault.
|
||||
*/
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS);
|
||||
if (rv)
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, 6);
|
||||
|
||||
rv = sb_read_mfgacc(PARAM_SAFETY_STATUS,
|
||||
SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data));
|
||||
if (rv || data[2] || data[3] || data[4] || data[5])
|
||||
return BATTERY_DISCONNECT_ERROR;
|
||||
|
||||
|
||||
@@ -60,8 +60,7 @@ test_mockable int sb_write(int cmd, int param)
|
||||
#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)
|
||||
{
|
||||
#ifdef CONFIG_BATTERY_CUT_OFF
|
||||
/*
|
||||
@@ -71,12 +70,44 @@ int sb_read_string(int port, int slave_addr, int offset, uint8_t *data,
|
||||
return EC_RES_ACCESS_DENIED;
|
||||
#endif
|
||||
#ifdef CONFIG_SMBUS
|
||||
return smbus_read_string(port, slave_addr, offset, data, len);
|
||||
return smbus_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
offset, data, len);
|
||||
#else
|
||||
return i2c_read_string(port, slave_addr, offset, data, len);
|
||||
return i2c_read_string(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
offset, data, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
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 manufacturer access 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);
|
||||
@@ -237,22 +268,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)
|
||||
@@ -411,27 +439,14 @@ static int command_batt_mfg_access_read(int argc, char **argv)
|
||||
if (argc > 3) {
|
||||
len = strtoi(argv[3], &e, 0);
|
||||
len += 2;
|
||||
if (*e || len < 1 || len > sizeof(data))
|
||||
if (*e || len < 3 || len > sizeof(data))
|
||||
return EC_ERROR_PARAM3;
|
||||
}
|
||||
|
||||
/* Send manufacturer access command */
|
||||
rv = sb_write(SB_MANUFACTURER_ACCESS, cmd);
|
||||
rv = sb_read_mfgacc(cmd, block, data, len);
|
||||
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(I2C_PORT_BATTERY, BATTERY_ADDR,
|
||||
block, data, len);
|
||||
if (rv)
|
||||
return rv;
|
||||
if (data[0] != (cmd & 0xff) || data[1] != (cmd >> 8 & 0xff))
|
||||
return EC_ERROR_UNKNOWN;
|
||||
|
||||
ccprintf("data[MSB->LSB]=0x");
|
||||
do {
|
||||
len--;
|
||||
@@ -500,8 +515,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;
|
||||
|
||||
|
||||
@@ -141,11 +141,13 @@
|
||||
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 battery */
|
||||
int sb_read_mfgacc(int cmd, int block, uint8_t *data, int len);
|
||||
|
||||
#endif /* __CROS_EC_BATTERY_SMART_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user