summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2023-03-27 14:33:20 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-03-27 08:16:38 +0000
commitaca8fa4f388c0e384fe3d2932df8ba34bf49e40f (patch)
treee1a95a106563817b6e561847e958e6e271f45016 /driver
parent853d0b00bad965342334e28b5182cba83f538d13 (diff)
downloadchrome-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.c25
-rw-r--r--driver/ppc/rt1739.h2
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)