summaryrefslogtreecommitdiff
path: root/driver/tcpm
diff options
context:
space:
mode:
authorCaveh Jalali <caveh@chromium.org>2021-08-10 01:21:11 -0700
committerCommit Bot <commit-bot@chromium.org>2021-08-14 06:26:39 +0000
commite36481d3e0da6f2e9ff792a10f6ba8bf75ed7bad (patch)
tree155ab884f5fc4f8dc40680bc698ee66abdefdf1a /driver/tcpm
parentab1cdf1648d390619848f4f4f901b14aeee75244 (diff)
downloadchrome-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>
Diffstat (limited to 'driver/tcpm')
-rw-r--r--driver/tcpm/ps8xxx.c21
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;
}