summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Chao <scott_chao@wistron.corp-partner.google.com>2021-11-22 14:17:30 +0800
committerCommit Bot <commit-bot@chromium.org>2021-12-20 02:15:56 +0000
commit69c80bee24ca9163bf1809865f631883da1a44fb (patch)
tree5f51471836ab887ef5c353094e972531651a1b66
parent8b9cf84ce4c93447eb1d78a25b532c76be5e3e34 (diff)
downloadchrome-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>
-rw-r--r--board/primus/board.c42
-rw-r--r--board/primus/board.h4
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
/*