diff options
author | Alec Berg <alecaberg@chromium.org> | 2015-07-30 14:19:46 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-08-02 08:17:09 +0000 |
commit | 37b65d5c8c9400049d17a9349ad0b55f42b8203b (patch) | |
tree | 9106a145b182f171d188b4246522097c4ef0a2db | |
parent | 64bbfe253c7ec2d0fd34cf309d4685448a2fa13d (diff) | |
download | chrome-ec-37b65d5c8c9400049d17a9349ad0b55f42b8203b.tar.gz |
pd: don't enable try.src when battery is not present or too low
Don't enable try.src when battery is not present or <1% because
try.src will temporarily cut off power to system.
BUG=chrome-os-partner:43413
BRANCH=samus
TEST=tested on samus using "battfake" ec command. when battery
<1%, verified that try.src is disabled and when battery >=1% and
the AP is on (dual-role toggling is on), then try.src is enabled.
verified boot without battery succeeds on samus and glados.
Change-Id: I64816bb7c9669bfeca61687bcd9a48da32e67945
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/289854
Reviewed-by: Scott Collyer <scollyer@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r-- | board/samus_pd/board.c | 7 | ||||
-rw-r--r-- | common/usb_pd_protocol.c | 55 | ||||
-rw-r--r-- | include/config.h | 3 |
3 files changed, 48 insertions, 17 deletions
diff --git a/board/samus_pd/board.c b/board/samus_pd/board.c index dcf40cdd99..e1941cabbe 100644 --- a/board/samus_pd/board.c +++ b/board/samus_pd/board.c @@ -624,8 +624,11 @@ void board_set_charge_limit(int charge_ma) static void board_update_battery_soc(int soc) { - batt_soc = soc; - board_update_charge_limit(desired_charge_rate_ma); + if (batt_soc != soc) { + batt_soc = soc; + board_update_charge_limit(desired_charge_rate_ma); + hook_notify(HOOK_BATTERY_SOC_CHANGE); + } } /* Send host event up to AP */ diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 24f8b63e86..1ab2209d5d 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -7,6 +7,7 @@ #include "board.h" #include "case_closed_debug.h" #include "charge_manager.h" +#include "charge_state.h" #include "chipset.h" #include "common.h" #include "console.h" @@ -1167,21 +1168,43 @@ enum pd_dual_role_states pd_get_dual_role(void) return drp_state; } +#ifdef CONFIG_USB_PD_TRY_SRC +static void pd_update_try_source(void) +{ + int i; + +#ifndef CONFIG_CHARGER + int batt_soc = board_get_battery_soc(); +#else + int batt_soc = charge_get_percent(); +#endif + + /* + * Enable try source when dual-role toggling AND battery is present + * and at some minimum percentage. + */ + pd_try_src_enable = drp_state == PD_DRP_TOGGLE_ON && + batt_soc >= CONFIG_USB_PD_TRY_SRC_MIN_BATT_SOC; + + /* + * Clear this flag to cover case where a TrySrc + * mode went from enabled to disabled and trying_source + * was active at that time. + */ + for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) + pd[i].flags &= ~PD_FLAGS_TRY_SRC; + +} +DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, pd_update_try_source, HOOK_PRIO_DEFAULT); +#endif + void pd_set_dual_role(enum pd_dual_role_states state) { int i; drp_state = state; #ifdef CONFIG_USB_PD_TRY_SRC - pd_try_src_enable = (state == PD_DRP_TOGGLE_ON) ? 1 : 0; - for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { - /* - * Clear this flag to cover case where a TrySrc - * mode went from enabled to disabled and trying_source - * was active at that time. - */ - pd[i].flags &= ~PD_FLAGS_TRY_SRC; - } + pd_update_try_source(); #endif for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) { @@ -2770,14 +2793,16 @@ static int command_pd(int argc, char **argv) else if (!strncasecmp(argv[1], "trysrc", 6)) { int enable; - if (argc < 3) + if (argc < 2) { return EC_ERROR_PARAM_COUNT; + } else if (argc >= 3) { + enable = strtoi(argv[2], &e, 10); + if (*e) + return EC_ERROR_PARAM3; + pd_try_src_enable = enable ? 1 : 0; + } - enable = strtoi(argv[2], &e, 10); - if (*e) - return EC_ERROR_PARAM3; - pd_try_src_enable = enable ? 1 : 0; - ccprintf("Try.SRC %s\n", enable ? "on" : "off"); + ccprintf("Try.SRC %s\n", pd_try_src_enable ? "on" : "off"); return EC_SUCCESS; } #endif diff --git a/include/config.h b/include/config.h index 293d86eb7c..2b1152468d 100644 --- a/include/config.h +++ b/include/config.h @@ -1616,6 +1616,9 @@ /* Use this option to enable Try.SRC mode for Dual Role devices */ #undef CONFIG_USB_PD_TRY_SRC +/* Set the default minimum battery percentage for Try.Src to be enabled */ +#define CONFIG_USB_PD_TRY_SRC_MIN_BATT_SOC 1 + /* Alternative configuration keeping only the TX part of PHY */ #undef CONFIG_USB_PD_TX_PHY_ONLY |