diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2023-03-27 14:33:20 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-03-27 08:16:38 +0000 |
commit | aca8fa4f388c0e384fe3d2932df8ba34bf49e40f (patch) | |
tree | e1a95a106563817b6e561847e958e6e271f45016 /driver | |
parent | 853d0b00bad965342334e28b5182cba83f538d13 (diff) | |
download | chrome-ec-aca8fa4f388c0e384fe3d2932df8ba34bf49e40f.tar.gz |
rt1739: disconnect SBU/DP/DM when unattached
Disconnect the unused SBU/DP/DM pins when unused to save power.
This saves 0.5mW.
BUG=b:274553828
TEST=ppc_dump 0, and check 0x38 is 0x0f when attached, and 0x0 when
unattached
BRANCH=none
Change-Id: Ic428c79d0b7d79f79824069f543f5a06d304dbf3
Signed-off-by: Eric Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4368970
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Tested-by: Eric Yilun Lin <yllin@google.com>
Auto-Submit: Eric Yilun Lin <yllin@google.com>
Diffstat (limited to 'driver')
-rw-r--r-- | driver/ppc/rt1739.c | 25 | ||||
-rw-r--r-- | driver/ppc/rt1739.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/driver/ppc/rt1739.c b/driver/ppc/rt1739.c index c6c3f46ae8..7c70c18975 100644 --- a/driver/ppc/rt1739.c +++ b/driver/ppc/rt1739.c @@ -482,6 +482,31 @@ void rt1739_interrupt(int port) hook_call_deferred(&rt1739_deferred_interrupt_data, 0); } +/* disconnect SBU, DP, DM when unused to save power */ +void rt1739_pd_connect(void) +{ + for (int i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; ++i) { + if (ppc_chips[i].drv == &rt1739_ppc_drv) + update_reg(i, RT1739_REG_SBU_CTRL_01, + RT1739_DM_SWEN | RT1739_DP_SWEN | + RT1739_SBU1_SWEN | RT1739_SBU2_SWEN, + MASK_SET); + } +} +DECLARE_HOOK(HOOK_USB_PD_CONNECT, rt1739_pd_connect, HOOK_PRIO_DEFAULT); + +void rt1739_pd_disconnect(void) +{ + for (int i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; ++i) { + if (ppc_chips[i].drv == &rt1739_ppc_drv) + update_reg(i, RT1739_REG_SBU_CTRL_01, + RT1739_DM_SWEN | RT1739_DP_SWEN | + RT1739_SBU1_SWEN | RT1739_SBU2_SWEN, + MASK_CLR); + } +} +DECLARE_HOOK(HOOK_USB_PD_DISCONNECT, rt1739_pd_disconnect, HOOK_PRIO_DEFAULT); + const struct ppc_drv rt1739_ppc_drv = { .init = &rt1739_init, .is_sourcing_vbus = &rt1739_is_sourcing_vbus, diff --git a/driver/ppc/rt1739.h b/driver/ppc/rt1739.h index 9fab34229e..d2cf006564 100644 --- a/driver/ppc/rt1739.h +++ b/driver/ppc/rt1739.h @@ -108,6 +108,8 @@ #define RT1739_REG_SBU_CTRL_01 0x38 #define RT1739_SBUSW_MUX_SEL BIT(4) +#define RT1739_SBU2_SWEN BIT(3) +#define RT1739_SBU1_SWEN BIT(2) #define RT1739_DM_SWEN BIT(1) #define RT1739_DP_SWEN BIT(0) |