From df2f085c16167f3afa2dbc4c34ef3c638b4f4f45 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Tue, 31 Jan 2017 14:39:32 -0800 Subject: [PATCH] kevin / gru: Add BC1.2 charge ramp BUG=chrome-os-partner:54099 BRANCH=reef, gru TEST=Verify charge_ramp success with a variety of BC1.2 chargers. Signed-off-by: Shawn Nematbakhsh Change-Id: I0e8bbd063e0933893a4a7f48a15a391c0ad9898a Reviewed-on: https://chromium-review.googlesource.com/435562 Commit-Ready: Shawn N Tested-by: Shawn N Reviewed-by: Shawn N --- board/kevin/board.h | 2 ++ board/kevin/build.mk | 2 +- board/kevin/charge_ramp.c | 56 +++++++++++++++++++++++++++++++++++++++ board/kevin/ec.tasklist | 2 ++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 board/kevin/charge_ramp.c diff --git a/board/kevin/board.h b/board/kevin/board.h index 15de3830b0..3d2f08e884 100644 --- a/board/kevin/board.h +++ b/board/kevin/board.h @@ -116,6 +116,7 @@ /* USB PD config */ #define CONFIG_CASE_CLOSED_DEBUG_EXTERNAL #define CONFIG_CHARGE_MANAGER +#define CONFIG_CHARGE_RAMP #define CONFIG_USB_POWER_DELIVERY #define CONFIG_USB_PD_ALT_MODE #define CONFIG_USB_PD_ALT_MODE_DFP @@ -184,6 +185,7 @@ /* Modules we want to exclude */ #undef CONFIG_CMD_BATTFAKE +#undef CONFIG_CMD_CHARGER_PSYS #undef CONFIG_CMD_FLASH #undef CONFIG_CMD_HASH #undef CONFIG_CMD_I2C_SCAN diff --git a/board/kevin/build.mk b/board/kevin/build.mk index cf5289d541..e0efe5638f 100644 --- a/board/kevin/build.mk +++ b/board/kevin/build.mk @@ -10,6 +10,6 @@ CHIP:=npcx CHIP_VARIANT:=npcx5m5g -board-y=battery.o board.o usb_pd_policy.o +board-y=battery.o board.o charge_ramp.o usb_pd_policy.o board-$(BOARD_GRU)+=led_gru.o board-$(BOARD_KEVIN)+=led_kevin.o diff --git a/board/kevin/charge_ramp.c b/board/kevin/charge_ramp.c new file mode 100644 index 0000000000..70f12da5a3 --- /dev/null +++ b/board/kevin/charge_ramp.c @@ -0,0 +1,56 @@ +/* Copyright 2017 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Board-specific charge ramp callbacks. */ + +#include "common.h" + +#include "bd9995x.h" +#include "charge_manager.h" +#include "charge_ramp.h" +#include "charge_state.h" +#include "system.h" + +/** + * Return true if ramping is allowed for given supplier + */ +int board_is_ramp_allowed(int supplier) +{ + /* Don't allow ramping in RO when write protected */ + if (system_get_image_copy() != SYSTEM_IMAGE_RW + && system_is_locked()) + return 0; + else + return supplier == CHARGE_SUPPLIER_BC12_DCP || + supplier == CHARGE_SUPPLIER_BC12_SDP || + supplier == CHARGE_SUPPLIER_BC12_CDP || + supplier == CHARGE_SUPPLIER_PROPRIETARY; +} + +/** + * Return true if VBUS is sagging too low + */ +int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state) +{ + return charger_get_vbus_voltage(port) < BD9995X_BC12_MIN_VOLTAGE; +} + +/** + * Return the maximum allowed input current + */ +int board_get_ramp_current_limit(int supplier, int sup_curr) +{ + return bd9995x_get_bc12_ilim(supplier); +} + +/** + * Return if board is consuming full amount of input current + */ +int board_is_consuming_full_charge(void) +{ + int chg_pct = charge_get_percent(); + + return chg_pct > 2 && chg_pct < 95; +} diff --git a/board/kevin/ec.tasklist b/board/kevin/ec.tasklist index 85457e275d..8fa08478e8 100644 --- a/board/kevin/ec.tasklist +++ b/board/kevin/ec.tasklist @@ -19,6 +19,7 @@ #ifdef BOARD_KEVIN #define CONFIG_TASK_LIST \ TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_ALWAYS(CHG_RAMP, chg_ramp_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ @@ -33,6 +34,7 @@ #define CONFIG_TASK_LIST \ TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \ + TASK_ALWAYS(CHG_RAMP, chg_ramp_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, TASK_STACK_SIZE) \ TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \