diff options
author | Caveh Jalali <caveh@chromium.org> | 2021-08-10 01:21:11 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-14 06:26:39 +0000 |
commit | e36481d3e0da6f2e9ff792a10f6ba8bf75ed7bad (patch) | |
tree | 155ab884f5fc4f8dc40680bc698ee66abdefdf1a | |
parent | ab1cdf1648d390619848f4f4f901b14aeee75244 (diff) | |
download | chrome-ec-e36481d3e0da6f2e9ff792a10f6ba8bf75ed7bad.tar.gz |
ps8xxx: Refactor role control delay logic
This refactors how we deal with ps8xxx_role_control_delay. An array of
booelans is replaced with an array of delay values with default of 0ms.
Instead of checking the array to determine whether a 1ms delay should be
performed, the array unconditionally specifes the delay to be performed.
The default 0ms delay is equivalent to the previous "false" entry.
BRANCH=none
BUG=b:186189039
TEST=buildall passes
Change-Id: Ie351c58442eb206f38cea7a1f30dd1789a8c8025
Signed-off-by: Caveh Jalali <caveh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3084330
Reviewed-by: Boris Mittelberg <bmbm@google.com>
-rw-r--r-- | driver/tcpm/ps8xxx.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/driver/tcpm/ps8xxx.c b/driver/tcpm/ps8xxx.c index ce0a4a9c6a..28181e16bb 100644 --- a/driver/tcpm/ps8xxx.c +++ b/driver/tcpm/ps8xxx.c @@ -75,7 +75,7 @@ static uint16_t product_id[CONFIG_USB_PD_PORT_MAX_COUNT]; * * See b/171430855 for details. */ -static bool ps8815_role_control_delay[CONFIG_USB_PD_PORT_MAX_COUNT]; +static uint8_t ps8xxx_role_control_delay_ms[CONFIG_USB_PD_PORT_MAX_COUNT]; /* * b/178664884, on PS8815, firmware revision 0x10 and older can report an @@ -436,6 +436,15 @@ static int ps8xxx_tcpm_release(int port) return tcpci_tcpm_release(port); } +static void ps8xxx_role_control_delay(int port) +{ + int delay; + + delay = ps8xxx_role_control_delay_ms[port]; + if (delay) + msleep(delay); +} + #ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE static int ps8xxx_set_role_ctrl(int port, enum tcpc_drp drp, enum tcpc_rp_value rp, enum tcpc_cc_pull pull) @@ -448,8 +457,7 @@ static int ps8xxx_set_role_ctrl(int port, enum tcpc_drp drp, * b/171430855 delay 1 ms after ROLE_CONTROL updates to prevent * transmit buffer corruption */ - if (ps8815_role_control_delay[port]) - msleep(1); + ps8xxx_role_control_delay(port); return rv; } @@ -663,8 +671,6 @@ __maybe_unused static void ps8815_transmit_buffer_workaround_check(int port) int val; int status; - ps8815_role_control_delay[port] = false; - if (product_id[port] != PS8815_PRODUCT_ID) return; @@ -679,7 +685,7 @@ __maybe_unused static void ps8815_transmit_buffer_workaround_check(int port) switch (val) { case 0x0a00: case 0x0a01: - ps8815_role_control_delay[port] = true; + ps8xxx_role_control_delay_ms[port] = 1; break; default: break; @@ -790,8 +796,7 @@ static int ps8xxx_tcpm_set_cc(int port, int pull) * b/171430855 delay 1 ms after ROLE_CONTROL updates to prevent * transmit buffer corruption */ - if (ps8815_role_control_delay[port]) - msleep(1); + ps8xxx_role_control_delay(port); return rv; } |