summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2014-11-12 08:55:34 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-11-18 05:21:28 +0000
commit2ff6a30c47142db02be4b52ab42f2dd4da5aeb59 (patch)
tree266062aa70b4624881db2adee4f1d0c9bc73a559
parent7e7e82f2c1855a46f4cba2d4f08e4f8c2e842a5c (diff)
downloadchrome-ec-2ff6a30c47142db02be4b52ab42f2dd4da5aeb59.tar.gz
samus: enable bq learn mode to avoid backboosting
For samus, use learn mode on BQ24773 to avoid the soft start that causes backboosting on some boards. BUG=chrome-os-partner:33644 BRANCH=samus TEST=tested in EE lab on a board that was backboosting reliable. this fixes backboosting at 5V, and also on 20V to 5V transitions. Change-Id: I97c52a55ba07662d444e67bfbc9ca488b530f423 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/229282 Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
-rw-r--r--board/samus/extpower.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/board/samus/extpower.c b/board/samus/extpower.c
index 4da7e655a7..60f97a4da2 100644
--- a/board/samus/extpower.c
+++ b/board/samus/extpower.c
@@ -8,6 +8,7 @@
* Drive high in S5-S0 when AC_PRESENT is high, otherwise drive low.
*/
+#include "charger.h"
#include "chipset.h"
#include "common.h"
#include "extpower.h"
@@ -25,10 +26,24 @@ int extpower_is_present(void)
*/
static void extpower_deferred(void)
{
+ static int extpower_prev;
+ int extpower = extpower_is_present();
+
+ if (extpower && !extpower_prev) {
+ charger_discharge_on_ac(0);
+ } else if (extpower && extpower_prev) {
+ /* glitch on AC_PRESENT, attempt to recover from backboost */
+ charger_discharge_on_ac(1);
+ charger_discharge_on_ac(0);
+ } else {
+ charger_discharge_on_ac(1);
+ }
+ extpower_prev = extpower;
+
hook_notify(HOOK_AC_CHANGE);
/* Forward notification to host */
- if (extpower_is_present())
+ if (extpower)
host_set_single_event(EC_HOST_EVENT_AC_CONNECTED);
else
host_set_single_event(EC_HOST_EVENT_AC_DISCONNECTED);
@@ -66,6 +81,8 @@ static void extpower_init(void)
{
extpower_buffer_to_pch();
+ hook_call_deferred(extpower_deferred, 0);
+
/* Enable interrupts, now that we've initialized */
gpio_enable_interrupt(GPIO_AC_PRESENT);
}