diff options
author | Bill Richardson <wfrichar@chromium.org> | 2013-06-06 10:16:57 -0700 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-06-07 10:52:13 -0700 |
commit | 710cadde7c4112d88b078838521aabce72cf7920 (patch) | |
tree | bd5cd12f3ee19b47ce5e03c15769a666b3921a89 | |
parent | c848e3216179ad0fb53d937da20237d4fe0266c7 (diff) | |
download | chrome-ec-710cadde7c4112d88b078838521aabce72cf7920.tar.gz |
Improve 'sb' command, add 'sbc' command
The sbc command can be used to get/set registers from the smart battery
controller. The sb command already does that for the smart battery itself.
BUG=none
BRANCH=none
TEST=manual
Try it out.
Change-Id: Idaea451e58988ab2d6bc40164721cb5577d903af
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/57813
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | common/smart_battery.c | 78 |
1 files changed, 52 insertions, 26 deletions
diff --git a/common/smart_battery.c b/common/smart_battery.c index 2c4eb32f1f..e0bc9c5e46 100644 --- a/common/smart_battery.c +++ b/common/smart_battery.c @@ -232,11 +232,11 @@ DECLARE_CONSOLE_COMMAND(battery, command_battery, NULL); -/* Usage:sb <r/w> cmd [uint16_t w_word] - * sb r 0x14 // desired charging current - * sb r 0x15 // desired charging voltage - * sb r 0x3 // battery mode - * sb w 0x3 0xe001 // set battery mode +/* Usage:sb reg [value] + * sb 0x14 // read desired charging current + * sb 0x15 // read desired charging voltage + * sb 0x3 // read battery mode + * sb 0x3 0xe001 // set battery mode to 0xe001 */ static int command_sb(int argc, char **argv) { @@ -244,41 +244,67 @@ static int command_sb(int argc, char **argv) int cmd, d; char *e; - if (argc < 3) + if (argc < 2) return EC_ERROR_PARAM_COUNT; - cmd = strtoi(argv[2], &e, 0); + cmd = strtoi(argv[1], &e, 0); if (*e) return EC_ERROR_PARAM2; - if (argv[1][0] == 'r') { - rv = i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR, cmd, &d); - if (rv) - return rv; - - ccprintf("R SBCMD[%04x] 0x%04x (%d)\n", cmd, d, d); - return EC_SUCCESS; - } else if (argc >= 4 && argv[1][0] == 'w') { - d = strtoi(argv[3], &e, 0); + if (argc > 2) { + d = strtoi(argv[2], &e, 0); if (*e) return EC_ERROR_PARAM3; - - ccprintf("W SBCMD[%04x] 0x%04x (%d)\n", cmd, d, d); - rv = i2c_write16(I2C_PORT_BATTERY, BATTERY_ADDR, cmd, d); - if (rv) - return rv; - return EC_SUCCESS; + return sb_write(cmd, d); } - return EC_ERROR_INVAL; - + rv = sb_read(cmd, &d); + if (rv) + return rv; + ccprintf("0x%04x (%d)\n", d, d); + return EC_SUCCESS; } + DECLARE_CONSOLE_COMMAND(sb, command_sb, - "[r addr | w addr value]", - "Read/write smart battery data", + "reg [value]", + "Read/write smart battery registers", + NULL); + +static int command_sbc(int argc, char **argv) +{ + int rv; + int cmd, d; + char *e; + + if (argc < 2) + return EC_ERROR_PARAM_COUNT; + + cmd = strtoi(argv[1], &e, 0); + if (*e) + return EC_ERROR_PARAM2; + + if (argc > 2) { + d = strtoi(argv[2], &e, 0); + if (*e) + return EC_ERROR_PARAM3; + return sbc_write(cmd, d); + } + + rv = sbc_read(cmd, &d); + if (rv) + return rv; + + ccprintf("0x%04x (%d)\n", d, d); + return EC_SUCCESS; +} + +DECLARE_CONSOLE_COMMAND(sbc, command_sbc, + "reg [value]", + "Read/write smart battery controller registers", NULL); + /*****************************************************************************/ /* Smart battery pass-through */ |