summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2021-09-17 14:28:03 +0800
committerCommit Bot <commit-bot@chromium.org>2021-09-22 11:22:04 +0000
commit36be917aa56ceea5a36837e7ad743927729a511f (patch)
tree4bde2abaadafa762cf6ba15b2024872a95f7657f
parent96a380751f6ed38fcb044ccfd283454a539352fe (diff)
downloadchrome-ec-36be917aa56ceea5a36837e7ad743927729a511f.tar.gz
cherry: redesign RT1718S GPIO 1/2 behavior
Reimplement the logic of GPIO 1/2 such that the state of these pins does not tied together anymore. Instead, board_set_active_charge_port controls GPIO 1 only, and pd_power_supply_* functions controls GPIO 2 only. Also give these pins a readable name. BUG=b:198707662 TEST=1) pass faft_pd on port C1 2) able to boot with C1 plugged AC power and without battery BRANCH=none Signed-off-by: Ting Shen <phoenixshen@google.com> Change-Id: Id33160a0c3ed202cdfe3666c2444098a3031229f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3168036 Reviewed-by: Rong Chang <rongchang@chromium.org> Reviewed-by: Eric Yilun Lin <yllin@google.com> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--baseboard/cherry/baseboard.c38
-rw-r--r--baseboard/cherry/baseboard.h11
-rw-r--r--baseboard/cherry/usb_pd_policy.c9
3 files changed, 10 insertions, 48 deletions
diff --git a/baseboard/cherry/baseboard.c b/baseboard/cherry/baseboard.c
index 4b20681455..692c14cf73 100644
--- a/baseboard/cherry/baseboard.c
+++ b/baseboard/cherry/baseboard.c
@@ -373,28 +373,6 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = {
},
};
-int rt1718s_gpio_ctrl(enum rt1718s_gpio_state state)
-{
- const int port = 1;
-
- switch (state) {
- case RT1718S_GPIO_DISABLED:
- rt1718s_gpio_set_level(port, RT1718S_GPIO1, 1);
- rt1718s_gpio_set_level(port, RT1718S_GPIO2, 0);
- break;
- case RT1718S_GPIO_ENABLE_SINK:
- rt1718s_gpio_set_level(port, RT1718S_GPIO1, 0);
- rt1718s_gpio_set_level(port, RT1718S_GPIO2, 0);
- break;
- case RT1718S_GPIO_ENABLE_SOURCE:
- rt1718s_gpio_set_level(port, RT1718S_GPIO1, 1);
- rt1718s_gpio_set_level(port, RT1718S_GPIO2, 1);
- break;
- }
-
- return EC_SUCCESS;
-}
-
__override int board_rt1718s_init(int port)
{
/* set GPIO 1~3 as push pull, as output, output low. */
@@ -495,6 +473,7 @@ int board_set_active_charge_port(int port)
if (ppc_vbus_sink_enable(i, 0))
CPRINTS("Disabling C%d as sink failed.", i);
}
+ rt1718s_gpio_set_level(1, GPIO_EN_USB_C1_VBUS_L, 1);
return EC_SUCCESS;
}
@@ -525,18 +504,7 @@ int board_set_active_charge_port(int port)
return EC_ERROR_UNKNOWN;
}
- /*
- * RT1718S gpio control:
- * If new charge port is port 1, enable sink path.
- * If new charge port is not port 1, and port 1 is not sourcing,
- * turn off both paths.
- * Otherwise: port 1 is sourcing, don't change.
- */
- if (port == 1)
- RETURN_ERROR(rt1718s_gpio_ctrl(RT1718S_GPIO_ENABLE_SINK));
- else if (port != 1 && !ppc_is_sourcing_vbus(1))
- /* error ignored to make port 0 work without sub-board */
- rt1718s_gpio_ctrl(RT1718S_GPIO_DISABLED);
+ rt1718s_gpio_set_level(1, GPIO_EN_USB_C1_VBUS_L, !(port == 1));
return EC_SUCCESS;
}
@@ -602,7 +570,7 @@ __override int board_pd_set_frs_enable(int port, int enable)
* of set_level (= i2c_update) to save one read operation in
* FRS path.
*/
- rt1718s_gpio_set_flags(port, RT1718S_GPIO3,
+ rt1718s_gpio_set_flags(port, GPIO_EN_USB_C1_FRS,
enable ? GPIO_OUT_HIGH : GPIO_OUT_LOW);
return EC_SUCCESS;
}
diff --git a/baseboard/cherry/baseboard.h b/baseboard/cherry/baseboard.h
index 05292fa851..349a10997d 100644
--- a/baseboard/cherry/baseboard.h
+++ b/baseboard/cherry/baseboard.h
@@ -231,13 +231,10 @@ enum pwm_channel {
void board_reset_pd_mcu(void);
void rt1718s_tcpc_interrupt(enum gpio_signal signal);
-enum rt1718s_gpio_state {
- RT1718S_GPIO_DISABLED,
- RT1718S_GPIO_ENABLE_SINK,
- RT1718S_GPIO_ENABLE_SOURCE,
-};
-
-int rt1718s_gpio_ctrl(enum rt1718s_gpio_state state);
+/* RT1718S gpio to pin name mapping */
+#define GPIO_EN_USB_C1_VBUS_L RT1718S_GPIO1
+#define GPIO_EN_USB_C1_5V_OUT RT1718S_GPIO2
+#define GPIO_EN_USB_C1_FRS RT1718S_GPIO3
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BASEBOARD_H */
diff --git a/baseboard/cherry/usb_pd_policy.c b/baseboard/cherry/usb_pd_policy.c
index a520228ef6..0c7f4dcee5 100644
--- a/baseboard/cherry/usb_pd_policy.c
+++ b/baseboard/cherry/usb_pd_policy.c
@@ -217,7 +217,7 @@ void pd_power_supply_reset(int port)
pd_set_vbus_discharge(port, 1);
if (port == 1)
- rt1718s_gpio_ctrl(RT1718S_GPIO_DISABLED);
+ rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_5V_OUT, 0);
/* Notify host of power info change. */
pd_send_host_event(PD_EVENT_POWER_CHANGE);
@@ -245,11 +245,8 @@ int pd_set_power_supply_ready(int port)
if (rv)
return rv;
- if (port == 1) {
- rv = rt1718s_gpio_ctrl(RT1718S_GPIO_ENABLE_SOURCE);
- if (rv)
- return rv;
- }
+ if (port == 1)
+ rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_5V_OUT, 1);
/* Notify host of power info change. */
pd_send_host_event(PD_EVENT_POWER_CHANGE);