mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-09 00:51:29 +00:00
ryu: add charge ramp module
Add charge ramp module to samus. For BC1.2 DCPs allow ramping up to 2A, and for BC1.2 SDPs allow ramping to 1A. BUG=chrome-os-partner:34946 BRANCH=none TEST=tested with a variety of BC1.2 chargers, type-C only chargers, and PD chargers to make sure we always stabilize charging at an appropriate current limit. Change-Id: I63d4ba38f2e137aff32831386f1bde2cc7c57850 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/249934 Commit-Queue: Vic Yang <victoryang@chromium.org> Tested-by: Vic Yang <victoryang@chromium.org>
This commit is contained in:
committed by
ChromeOS Commit Bot
parent
1ef0f27e65
commit
777867a40f
@@ -9,6 +9,7 @@
|
||||
#include "battery.h"
|
||||
#include "case_closed_debug.h"
|
||||
#include "charge_manager.h"
|
||||
#include "charge_ramp.h"
|
||||
#include "charge_state.h"
|
||||
#include "charger.h"
|
||||
#include "common.h"
|
||||
@@ -36,6 +37,14 @@
|
||||
/* Default input current limit when VBUS is present */
|
||||
#define DEFAULT_CURR_LIMIT 500 /* mA */
|
||||
|
||||
/* VBUS too low threshold */
|
||||
#define VBUS_LOW_THRESHOLD_MV 4600
|
||||
|
||||
/* Input current error margin */
|
||||
#define IADP_ERROR_MARGIN_MA 100
|
||||
|
||||
static int charge_current_limit;
|
||||
|
||||
static void vbus_log(void)
|
||||
{
|
||||
CPRINTS("VBUS %d", gpio_get_level(GPIO_CHGR_ACOK));
|
||||
@@ -383,8 +392,51 @@ int board_set_active_charge_port(int charge_port)
|
||||
*/
|
||||
void board_set_charge_limit(int charge_ma)
|
||||
{
|
||||
int rv = charge_set_input_current_limit(MAX(charge_ma,
|
||||
CONFIG_CHARGER_INPUT_CURRENT));
|
||||
int rv;
|
||||
|
||||
charge_current_limit = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
|
||||
rv = charge_set_input_current_limit(charge_current_limit);
|
||||
if (rv < 0)
|
||||
CPRINTS("Failed to set input current limit for PD");
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether ramping is allowed for given supplier
|
||||
*/
|
||||
int board_is_ramp_allowed(int supplier)
|
||||
{
|
||||
return supplier == CHARGE_SUPPLIER_BC12_DCP ||
|
||||
supplier == CHARGE_SUPPLIER_BC12_SDP;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the maximum allowed input current
|
||||
*/
|
||||
int board_get_ramp_current_limit(int supplier)
|
||||
{
|
||||
switch (supplier) {
|
||||
case CHARGE_SUPPLIER_BC12_DCP:
|
||||
return 2000;
|
||||
case CHARGE_SUPPLIER_BC12_SDP:
|
||||
return 1000;
|
||||
default:
|
||||
return 500;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if board is consuming full amount of input current
|
||||
*/
|
||||
int board_is_consuming_full_charge(void)
|
||||
{
|
||||
return adc_read_channel(ADC_IADP) >= charge_current_limit -
|
||||
IADP_ERROR_MARGIN_MA;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if VBUS is sagging low enough that we should stop ramping
|
||||
*/
|
||||
int board_is_vbus_too_low(enum chg_ramp_vbus_state ramp_state)
|
||||
{
|
||||
return adc_read_channel(ADC_VBUS) < VBUS_LOW_THRESHOLD_MV;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
/* Optional features */
|
||||
#undef CONFIG_CMD_HASH
|
||||
#define CONFIG_CHARGE_MANAGER
|
||||
#define CONFIG_CHARGE_RAMP
|
||||
#define CONFIG_CMD_CHGRAMP
|
||||
#define CONFIG_FORCE_CONSOLE_RESUME
|
||||
#define CONFIG_STM_HWTIMER32
|
||||
#define CONFIG_USB_POWER_DELIVERY
|
||||
@@ -31,6 +33,7 @@
|
||||
#define CONFIG_USBC_SS_MUX
|
||||
#define CONFIG_USBC_VCONN
|
||||
#define CONFIG_ADC
|
||||
#define CONFIG_ADC_SAMPLE_TIME 3
|
||||
#define CONFIG_HW_CRC
|
||||
#define CONFIG_I2C
|
||||
#define CONFIG_LID_SWITCH
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
#define CONFIG_TASK_LIST \
|
||||
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
|
||||
TASK_ALWAYS(CHG_RAMP, chg_ramp_task, NULL, SMALLER_TASK_STACK_SIZE) \
|
||||
TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, SMALLER_TASK_STACK_SIZE) \
|
||||
TASK_NOTEST(LIGHTBAR, lightbar_task, NULL, LARGER_TASK_STACK_SIZE) \
|
||||
TASK_ALWAYS(CHARGER, charger_task, NULL, TASK_STACK_SIZE) \
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
#ifndef __USB_PD_CONFIG_H
|
||||
#define __USB_PD_CONFIG_H
|
||||
|
||||
#include "adc.h"
|
||||
#include "charge_state.h"
|
||||
#include "clock.h"
|
||||
#include "gpio.h"
|
||||
#include "registers.h"
|
||||
|
||||
/* Port and task configuration */
|
||||
|
||||
Reference in New Issue
Block a user