diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2021-02-05 13:44:26 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-05 07:32:25 +0000 |
commit | 193f3f3b8fd16f1204504ca4811a0dd0e56a54ff (patch) | |
tree | 9865040e9a366f62c1520ebb303b085df24b2a9a /baseboard/asurada/it5205_sbu.c | |
parent | cf0f32b89e2e563d6fccad8d78ba348369e68e7c (diff) | |
download | chrome-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.c | 68 |
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, ®)) + 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); +} |