diff options
author | Randall Spangler <rspangler@chromium.org> | 2014-02-07 10:45:05 -0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-02-08 00:14:48 +0000 |
commit | 5c808ee56c44be4c665de6a85f5feb5cd5753f9d (patch) | |
tree | d7f5af16f6775b56ecb1725a86b3b20d617cfdd5 /common/charger.c | |
parent | 558292108af63916fb502d2bcdf19bf3407810b0 (diff) | |
download | chrome-ec-5c808ee56c44be4c665de6a85f5feb5cd5753f9d.tar.gz |
Support DPTF charger current limiting
This enables the AP to limit charging current via ACPI.
BUG=chrome-os-partner:23971
BRANCH=rambi
TEST=manual
drain battery down to <90%, then plug into AC
(charger commands at EC console, iotools at root shell)
iotools io_write8 0x66 0x81
iotools io_write8 0x62 0x08
iotools io_write8 0x62 3
charger -> dptf limit 192, I_batt=192
charger dptf 320
charger -> dptf limit 320, I_batt=320
iotools io_write8 0x66 0x80
iotools io_write8 0x62 0x08
iotools io_read8 0x62 -> 0x05
iotools io_write8 0x66 0x81
iotools io_write8 0x62 0x08
iotools io_write8 0x62 0xff
charger -> dptf disabled, I_batt=(something > 192)
iotools io_write8 0x66 0x80
iotools io_write8 0x62 0x08
iotools io_read8 0x62 -> 0xff
Change-Id: Iace2ebbbc018143c0154310d7acd02d16a6b7339
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/185411
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'common/charger.c')
-rw-r--r-- | common/charger.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/common/charger.c b/common/charger.c index ebac3896c1..3780b2b5a1 100644 --- a/common/charger.c +++ b/common/charger.c @@ -8,6 +8,7 @@ #include "charger.h" #include "common.h" #include "console.h" +#include "dptf.h" #include "host_command.h" #include "printf.h" #include "util.h" @@ -16,6 +17,19 @@ #define CPUTS(outstr) cputs(CC_CHARGER, outstr) #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) +/* DPTF current limit, -1 = none */ +static int dptf_limit_ma = -1; + +void dptf_set_charging_current_limit(int ma) +{ + dptf_limit_ma = ma >= 0 ? ma : -1; +} + +int dptf_get_charging_current_limit(void) +{ + return dptf_limit_ma; +} + int charger_closest_voltage(int voltage) { const struct charger_info *info = charger_get_info(); @@ -39,6 +53,10 @@ int charger_closest_current(int current) { const struct charger_info * const info = charger_get_info(); + /* Apply DPTF limit if necessary */ + if (dptf_limit_ma >= 0 && current > dptf_limit_ma) + current = dptf_limit_ma; + /* * If the requested current is non-zero but below our minimum, * return the minimum. See crosbug.com/p/8662. @@ -112,6 +130,13 @@ static int print_info(void) info->input_current_min, info->input_current_max, info->input_current_step); + /* dptf current limit */ + print_item_name("I_dptf:"); + if (dptf_limit_ma >= 0) + ccprintf("%5d\n", dptf_limit_ma); + else + ccputs("disabled\n"); + return EC_SUCCESS; } @@ -138,11 +163,17 @@ static int command_charger(int argc, char **argv) if (*e) return EC_ERROR_PARAM2; return charger_set_voltage(d); + } else if (strcasecmp(argv[1], "dptf") == 0) { + d = strtoi(argv[2], &e, 0); + if (*e) + return EC_ERROR_PARAM2; + dptf_limit_ma = d; + return EC_SUCCESS; } else return EC_ERROR_PARAM1; } DECLARE_CONSOLE_COMMAND(charger, command_charger, - "[input | current | voltage] [newval]", + "[input | current | voltage | dptf] [newval]", "Get or set charger param(s)", NULL); |