diff options
author | Ting Shen <phoenixshen@google.com> | 2021-09-17 14:28:03 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-22 11:22:04 +0000 |
commit | 36be917aa56ceea5a36837e7ad743927729a511f (patch) | |
tree | 4bde2abaadafa762cf6ba15b2024872a95f7657f | |
parent | 96a380751f6ed38fcb044ccfd283454a539352fe (diff) | |
download | chrome-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.c | 38 | ||||
-rw-r--r-- | baseboard/cherry/baseboard.h | 11 | ||||
-rw-r--r-- | baseboard/cherry/usb_pd_policy.c | 9 |
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); |