diff options
Diffstat (limited to 'board/atlas')
-rw-r--r-- | board/atlas/board.c | 32 | ||||
-rw-r--r-- | board/atlas/board.h | 4 |
2 files changed, 29 insertions, 7 deletions
diff --git a/board/atlas/board.c b/board/atlas/board.c index d2562d43d3..6fbbb64b16 100644 --- a/board/atlas/board.c +++ b/board/atlas/board.c @@ -531,15 +531,39 @@ int board_set_active_charge_port(int charge_port) return EC_SUCCESS; } +/* + * Limit the input current to 95% negotiated limit, + * to account for the charger chip margin. + */ + +static int charger_derate(int current) +{ + return current * 95 / 100; +} + static void board_charger_init(void) { - charger_set_input_current_limit( - CHARGER_SOLO, - PD_MAX_CURRENT_MA * - (100 - CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT) / 100); + charger_set_input_current_limit(CHARGER_SOLO, + charger_derate(PD_MAX_CURRENT_MA)); } DECLARE_HOOK(HOOK_INIT, board_charger_init, HOOK_PRIO_DEFAULT); +/** + * Set the charge limit based upon desired maximum. + * + * @param port Port number. + * @param supplier Charge supplier type. + * @param charge_ma Desired charge limit (mA). + * @param charge_mv Negotiated charge voltage (mV). + */ +void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, + int charge_mv) +{ + charge_ma = charger_derate(charge_ma); + charge_set_input_current_limit( + MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv); +} + static void board_chipset_suspend(void) { gpio_set_level(GPIO_KBD_BL_EN, 0); diff --git a/board/atlas/board.h b/board/atlas/board.h index 3dbce640bb..9718ab7cdd 100644 --- a/board/atlas/board.h +++ b/board/atlas/board.h @@ -77,9 +77,7 @@ #define CONFIG_CHARGER #define CONFIG_CHARGER_ISL9238 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_DEFAULT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT 512 -#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT 5 +#define CONFIG_CHARGER_INPUT_CURRENT 512 #define CONFIG_CHARGER_PROFILE_OVERRIDE #define CONFIG_CHARGER_PSYS #define CONFIG_CHARGER_PSYS_READ |