summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2013-06-06 10:16:57 -0700
committerChromeBot <chrome-bot@google.com>2013-06-07 10:52:13 -0700
commit710cadde7c4112d88b078838521aabce72cf7920 (patch)
treebd5cd12f3ee19b47ce5e03c15769a666b3921a89
parentc848e3216179ad0fb53d937da20237d4fe0266c7 (diff)
downloadchrome-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.c78
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
*/