diff options
author | Scott Chao <scott_chao@wistron.corp-partner.google.com> | 2021-11-22 14:17:30 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-12-20 02:15:56 +0000 |
commit | 69c80bee24ca9163bf1809865f631883da1a44fb (patch) | |
tree | 5f51471836ab887ef5c353094e972531651a1b66 /board/primus | |
parent | 8b9cf84ce4c93447eb1d78a25b532c76be5e3e34 (diff) | |
download | chrome-ec-69c80bee24ca9163bf1809865f631883da1a44fb.tar.gz |
primus: enable 65w adapter and configure input current
When 65w adapter is plugged, set input current limit at
3.15A in S5 and 3.0A in S0.
BUG=b:206571423
BRANCH=none
TEST=make -j BOARD=primus
TEST=verified by power team
TEST=Plug adapter in S5/ S0
Power on/ off with adapter is plugged
Signed-off-by: Scott Chao <scott_chao@wistron.corp-partner.google.com>
Change-Id: I0f6410bf31b6fb4d34669bd8da1af0eba7969df9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3295249
Reviewed-by: Edward Doan <edoan@chromium.org>
Reviewed-by: Boris Mittelberg <bmbm@google.com>
Diffstat (limited to 'board/primus')
-rw-r--r-- | board/primus/board.c | 42 | ||||
-rw-r--r-- | board/primus/board.h | 4 |
2 files changed, 41 insertions, 5 deletions
diff --git a/board/primus/board.c b/board/primus/board.c index 0881ab1c86..d0fa9f6cae 100644 --- a/board/primus/board.c +++ b/board/primus/board.c @@ -8,6 +8,7 @@ #include "charge_ramp.h" #include "charger.h" #include "common.h" +#include "charge_manager.h" #include "charge_state_v2.h" #include "compile_time_macros.h" #include "console.h" @@ -35,6 +36,8 @@ #define KBLIGHT_LED_ON_LVL 100 #define KBLIGHT_LED_OFF_LVL 0 +#define PD_MAX_SUSPEND_CURRENT_MA 3000 + /******************************************************************************/ /* USB-A charging control */ @@ -123,12 +126,45 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, int charge_mv) { /* - * Follow OEM request to limit the input current to - * 97% negotiated limit. + * Need to set different input current limit depend on system state. + * Guard adapter plug/ un-plug here. */ - charge_ma = charge_ma * 97 / 100; + + if (((max_ma == PD_MAX_CURRENT_MA) && + chipset_in_state(CHIPSET_STATE_ANY_OFF)) || + (max_ma != PD_MAX_CURRENT_MA)) + charge_ma = charge_ma * 97 / 100; + else + charge_ma = charge_ma * 93 / 100; charge_set_input_current_limit(MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } + +static void configure_input_current_limit(void) +{ + /* + * If adapter == 3250mA, we need system be charged at 3150mA in S5. + * And system be charged at 3000mA in S0. + */ + int adapter_current_ma; + int adapter_current_mv; + /* Get adapter voltage/ current */ + adapter_current_mv = charge_manager_get_charger_voltage(); + adapter_current_ma = charge_manager_get_charger_current(); + + if ((adapter_current_ma == PD_MAX_CURRENT_MA) && + chipset_in_or_transitioning_to_state(CHIPSET_STATE_SUSPEND)) + adapter_current_ma = PD_MAX_SUSPEND_CURRENT_MA; + else + adapter_current_ma = adapter_current_ma * 97 / 100; + + charge_set_input_current_limit(MAX(adapter_current_ma, + CONFIG_CHARGER_INPUT_CURRENT), + adapter_current_mv); +} +DECLARE_HOOK(HOOK_CHIPSET_STARTUP, configure_input_current_limit, + HOOK_PRIO_DEFAULT); +DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN_COMPLETE, configure_input_current_limit, + HOOK_PRIO_DEFAULT); diff --git a/board/primus/board.h b/board/primus/board.h index 68739ce717..3bc6df86a0 100644 --- a/board/primus/board.h +++ b/board/primus/board.h @@ -49,8 +49,8 @@ * Passive USB-C cables only support up to 60W. */ #define PD_OPERATING_POWER_MW 15000 -#define PD_MAX_POWER_MW 60000 -#define PD_MAX_CURRENT_MA 3000 +#define PD_MAX_POWER_MW 65000 +#define PD_MAX_CURRENT_MA 3250 #define PD_MAX_VOLTAGE_MV 20000 /* |