Fizz: Limit input current

Fizz has an over current control system. There are two FETs
connected to two registers: PR257 & PR258. They control
the max input current as follows:

                               PR257, PR258
  For 4.62A (90W BJ adapter),     on,   off
  For 3.33A (65W BJ adapter),    off,    on
  For 3.00A (Type-C adapter),    off,   off

BJ adapters are distinguished by reading GPIO71.

This patch also removes ISL9238 driver and ramping code. The
charger chip has been removed from the board since proto2.

BUG=b:65013352
BRANCH=none
TEST=Boot Fizz Proto3 on BJ and Type-C.

Change-Id: I32c2467f4ab23adf3f9313a03914d74d64a722df
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/668119
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Daisuke Nojiri
2017-09-14 18:12:22 -07:00
committed by chrome-bot
parent 406302ffb0
commit 13fb9ac539
4 changed files with 36 additions and 54 deletions

View File

@@ -379,52 +379,34 @@ DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
void board_set_charge_limit(int port, int supplier, int charge_ma,
int max_ma, int charge_mv)
{
charger_set_input_current(charge_ma);
}
/**
* Return whether ramping is allowed for given supplier
*/
int board_is_ramp_allowed(int supplier)
{
/* Don't allow ramping in RO when write protected */
if (!system_is_in_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_OTHER);
}
/**
* Return the maximum allowed input current
*/
int board_get_ramp_current_limit(int supplier, int sup_curr)
{
switch (supplier) {
case CHARGE_SUPPLIER_BC12_DCP:
return 2000;
case CHARGE_SUPPLIER_BC12_SDP:
return 1000;
case CHARGE_SUPPLIER_BC12_CDP:
case CHARGE_SUPPLIER_PROPRIETARY:
return sup_curr;
default:
return 500;
/*
* We have two FETs connected to two registers: PR257 & PR258.
* These control thresholds of the over current monitoring system.
*
* PR257, PR258
* For 4.62A (90W BJ adapter), on, off
* For 3.33A (65W BJ adapter), off, on
* For 3.00A (Type-C adapter), off, off
*
* The over current monitoring system doesn't support less than 3A
* (e.g. 2.25A, 2.00A). These current most likely won't be enough to
* power the system. However, if they're needed, EC can monitor
* PMON_PSYS and trigger H_PROCHOT by itself.
*/
if (charge_ma >= 4620) {
gpio_set_level(GPIO_U42_P, 1);
gpio_set_level(GPIO_U22_C, 0);
} else if (charge_ma >= 3330) {
gpio_set_level(GPIO_U42_P, 0);
gpio_set_level(GPIO_U22_C, 1);
} else if (charge_ma >= 3000) {
gpio_set_level(GPIO_U42_P, 0);
gpio_set_level(GPIO_U22_C, 0);
} else {
CPRINTS("Current %dmA not supported", charge_mv);
}
}
/**
* Return if board is consuming full amount of input current
*/
int board_is_consuming_full_charge(void)
{
int chg_perc = charge_get_percent();
return chg_perc > 2 && chg_perc < 95;
}
const struct button_config buttons[CONFIG_BUTTON_COUNT] = {
[BUTTON_RECOVERY] = {
.name = "Recovery",

View File

@@ -62,19 +62,14 @@
/* Charger */
#define CONFIG_CHARGE_MANAGER
#define CONFIG_CHARGE_RAMP_HW /* This, or just RAMP? */
/* TODO(dnojiri): Set this right */
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 20000
#define CONFIG_CHARGER_ISL9238
#define CONFIG_CHARGER_INPUT_CURRENT 512
#define CONFIG_CHARGER_PSYS
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CMD_PD_CONTROL
#define CONFIG_EXTPOWER_GPIO
#undef CONFIG_EXTPOWER_DEBOUNCE_MS
#define CONFIG_EXTPOWER_DEBOUNCE_MS 1000
#undef CONFIG_EXTPOWER_DEBOUNCE_MS
#define CONFIG_EXTPOWER_DEBOUNCE_MS 1000
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_BUTTON_X86
#define CONFIG_POWER_BUTTON_INIT_IDLE

View File

@@ -36,11 +36,13 @@ GPIO(PCH_PWRBTN_L, PIN(7, 4), GPIO_ODR_HIGH) /* Power Button to SOC */
GPIO(EC_PLATFORM_RST, PIN(A, 6), GPIO_OUT_LOW) /* EC Reset to LDO_EN */
GPIO(SYS_RESET_L, PIN(6, 1), GPIO_ODR_HIGH) /* Cold Reset to SOC */
GPIO(PMIC_SLP_SUS_L, PIN(8, 5), GPIO_OUT_LOW) /* SLP_SUS# to PMIC */
GPIO(BATTERY_PRESENT_L, PIN(3, 4), GPIO_INPUT | GPIO_PULL_UP) /* Battery Present */
GPIO(CCD_MODE_ODL, PIN(6, 3), GPIO_INPUT) /* Case Closed Debug Mode */
GPIO(EC_HAVEN_RESET_ODL, PIN(0, 2), GPIO_ODR_HIGH) /* H1 Reset */
GPIO(ENTERING_RW, PIN(7, 6), GPIO_OUTPUT) /* EC Entering RW */
GPIO(PMIC_INT_L, PIN(6, 0), GPIO_INPUT) /* PMIC interrupt */
GPIO(U42_P, PIN(3, 3), GPIO_OUTPUT | GPIO_PULL_DOWN)
GPIO(U22_C, PIN(3, 4), GPIO_OUTPUT | GPIO_PULL_DOWN)
GPIO(POWER_RATE, PIN(7, 1), GPIO_INPUT) /* High: i3/5/7. Low: Celeron */
/* Fizz specific pins */
GPIO(LAN_PWR_EN, PIN(8, 3), GPIO_OUT_HIGH) /* Ethernet power enabled */

View File

@@ -287,7 +287,10 @@ static void board_charge_manager_init(void)
break;
case CHARGE_PORT_BARRELJACK:
cpi.voltage = input_voltage;
cpi.current = 3330; /* TODO(dnojiri): Set right value */
if (gpio_get_level(GPIO_POWER_RATE))
cpi.current = 4620;
else
cpi.current = 3330;
charge_manager_update_charge(CHARGE_SUPPLIER_DEDICATED, 1,
&cpi);
break;