summaryrefslogtreecommitdiff
path: root/baseboard/asurada/it5205_sbu.c
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2021-02-05 13:44:26 +0800
committerCommit Bot <commit-bot@chromium.org>2021-02-05 07:32:25 +0000
commit193f3f3b8fd16f1204504ca4811a0dd0e56a54ff (patch)
tree9865040e9a366f62c1520ebb303b085df24b2a9a /baseboard/asurada/it5205_sbu.c
parentcf0f32b89e2e563d6fccad8d78ba348369e68e7c (diff)
downloadchrome-ec-193f3f3b8fd16f1204504ca4811a0dd0e56a54ff.tar.gz
baseboard/asurada: refactor to support baseboard build
guidelines: 1. sensors are in the board, since this may changes most of the time 2. PPC/Charger/BC12/TCPC/PD are in the baseboard, this is unlikely changing 3. sub-board detection is in the baseboard 4. power signals, power sequence are in the baseboard 5. ADC/PWM this might change, but we keep them in the baseboard for now 6. it5205_sbu is not currently used for now, move it to baseboard 7. battery, led are kept in the board BUG=b:178439840 TEST=boot hayato to OS BRANCH=none Change-Id: I21bf5d1f7901a10c3538ad5646362f2b402652af Signed-off-by: Eric Yilun Lin <yllin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2675328 Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'baseboard/asurada/it5205_sbu.c')
-rw-r--r--baseboard/asurada/it5205_sbu.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/baseboard/asurada/it5205_sbu.c b/baseboard/asurada/it5205_sbu.c
new file mode 100644
index 0000000000..9ee59a5cc3
--- /dev/null
+++ b/baseboard/asurada/it5205_sbu.c
@@ -0,0 +1,68 @@
+/* Copyright 2020 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.
+ *
+ * IT5205 Type-C SBU OVP handler
+ */
+
+#include "console.h"
+#include "hooks.h"
+#include "it5205.h"
+#include "stdbool.h"
+#include "timer.h"
+#include "usb_mux.h"
+
+#define CPRINTS(format, args...) cprints(CC_USB, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_USB, format, ## args)
+
+#define OVP_RETRY_DELAY_US_MIN (100 * MSEC)
+
+static unsigned int ovp_retry_delay_us = OVP_RETRY_DELAY_US_MIN;
+
+static void reset_retry_delay(void)
+{
+ CPRINTS("IT5205 SBU OVP cleared");
+ ovp_retry_delay_us = OVP_RETRY_DELAY_US_MIN;
+}
+DECLARE_DEFERRED(reset_retry_delay);
+
+static void reset_csbu(void)
+{
+ /* double the retry time up to 1 minute */
+ ovp_retry_delay_us = MIN(ovp_retry_delay_us * 2, MINUTE);
+ /* and reset it if interrupt not triggered in a short period */
+ hook_call_deferred(&reset_retry_delay_data, 500 * MSEC);
+
+ /* re-enable sbu interrupt */
+ it5205h_enable_csbu_switch(&usb_muxes[0], false);
+ it5205h_enable_csbu_switch(&usb_muxes[0], true);
+}
+DECLARE_DEFERRED(reset_csbu);
+
+static void it5205h_hook_ac_change(void)
+{
+ int reg;
+
+ /* Check if the board has IT5205H, and read its ovp status */
+ if (i2c_read8(I2C_PORT_USB_MUX0, IT5205H_SBU_I2C_ADDR_FLAGS,
+ IT5205H_REG_ISR, &reg))
+ return;
+
+ /*
+ * Re-poll ovp status immediately if AC detached, because ovp will
+ * likely be recovered.
+ *
+ * Always perform the re-poll even when this hook is triggered by
+ * unrelated events.
+ */
+ if (reg & IT5205H_ISR_CSBU_OVP)
+ hook_call_deferred(&reset_csbu_data, 0);
+}
+DECLARE_HOOK(HOOK_AC_CHANGE, it5205h_hook_ac_change, HOOK_PRIO_DEFAULT);
+
+void it5205h_sbu_interrupt(enum gpio_signal signal)
+{
+ CPRINTS("IT5205 SBU OVP triggered");
+ hook_call_deferred(&reset_csbu_data, ovp_retry_delay_us);
+ hook_call_deferred(&reset_retry_delay_data, -1);
+}