summaryrefslogtreecommitdiff
path: root/driver/tcpm/rt1718s.c
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2021-09-13 17:44:22 +0800
committerCommit Bot <commit-bot@chromium.org>2021-09-14 07:37:22 +0000
commit3d1b834b57d4710a48d61c794a38b28be56a67ce (patch)
treebe6806476760624ecf38d53ac83857c5eedce430 /driver/tcpm/rt1718s.c
parent8b8de17aa9f124072f891d71e7d1731454771ce1 (diff)
downloadchrome-ec-3d1b834b57d4710a48d61c794a38b28be56a67ce.tar.gz
rt1718s: refactor: move gpio control to driver module
This CL moves RT1718S gpio control from board file to common driver codebase, and implements the set flag and get/set level functions. Note that this CL does not fully implement IOEX interface because TCPC has different init process than usual ioexpanders. BUG=none TEST=1) pass faft_pd 2) manually test pd source/sink/frs on port 1 BRANCH=main Signed-off-by: Ting Shen <phoenixshen@google.com> Change-Id: If2a0bca2b13ad4748eea54b4c8004da7dc6fc6a5 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3159643 Reviewed-by: Rong Chang <rongchang@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'driver/tcpm/rt1718s.c')
-rw-r--r--driver/tcpm/rt1718s.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/driver/tcpm/rt1718s.c b/driver/tcpm/rt1718s.c
index 9a2f6319c7..9d5a8895ad 100644
--- a/driver/tcpm/rt1718s.c
+++ b/driver/tcpm/rt1718s.c
@@ -487,6 +487,39 @@ out:
return rv;
}
+void rt1718s_gpio_set_flags(int port, enum rt1718s_gpio signal, uint32_t flags)
+{
+ int val = 0;
+
+ if (!(flags & GPIO_OPEN_DRAIN))
+ val |= RT1718S_GPIO_CTRL_OD_N;
+ if (flags & GPIO_PULL_UP)
+ val |= RT1718S_GPIO_CTRL_PU;
+ if (flags & GPIO_PULL_DOWN)
+ val |= RT1718S_GPIO_CTRL_PD;
+ if (flags & GPIO_HIGH)
+ val |= RT1718S_GPIO_CTRL_O;
+ if (flags & GPIO_OUTPUT)
+ val |= RT1718S_GPIO_CTRL_OE;
+
+ rt1718s_write8(port, RT1718S_GPIO_CTRL(signal), val);
+}
+
+void rt1718s_gpio_set_level(int port, enum rt1718s_gpio signal, int value)
+{
+ rt1718s_update_bits8(port, RT1718S_GPIO_CTRL(signal),
+ RT1718S_GPIO_CTRL_O,
+ value ? 0xFF : 0);
+}
+
+int rt1718s_gpio_get_level(int port, enum rt1718s_gpio signal)
+{
+ int val;
+
+ rt1718s_read8(port, RT1718S_GPIO_CTRL(signal), &val);
+ return !!(val & RT1718S_GPIO_CTRL_I);
+}
+
/* RT1718S is a TCPCI compatible port controller */
const struct tcpm_drv rt1718s_tcpm_drv = {
.init = &rt1718s_init,