diff options
author | Vincent Palatin <vpalatin@chromium.org> | 2018-02-15 10:50:26 +0100 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-04-08 19:59:34 +0000 |
commit | 79123454f7ec6c831b68dd6cc0f0e0d6dae07fbc (patch) | |
tree | ce8e85ce74f4e7be28682bb0c3a62ca4b6beee1b | |
parent | 6ca477510d8203812792e8d53059e297f71b1e87 (diff) | |
download | chrome-ec-79123454f7ec6c831b68dd6cc0f0e0d6dae07fbc.tar.gz |
pd: retry DR_SWAP after a WAIT
If the other side answers our DR_SWAP request with a WAIT message (as
bizarre as it might be), we want to retry later rather than giving up.
Set again the PD_FLAGS_CHECK_DR_ROLE flag in order to do so.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BRANCH=fizz
BUG=chromium:814098
TEST=do repeated cold reset on Fizz connected to the 'interesting' USB-C
screen and see the DP alternate mode negotiated.
Change-Id: I9fcfbd739a46c06d41ab7fd3fb1fb4b7084f3aa6
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Original-Commit-Id: 00ac58809990a041b0ffff442398008b4c4e0adf
Original-Change-Id: Icfb9fa209ce8cbe3c42c1e6946b43464544bdaea
Original-Reviewed-on: https://chromium-review.googlesource.com/921141
Original-Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Original-Tested-by: Vincent Palatin <vpalatin@chromium.org>
Original-Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Original-Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Original-Reviewed-by: Benson Leung <bleung@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1002112
-rw-r--r-- | common/usb_pd_protocol.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 460916e8f2..00d97f8381 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -979,8 +979,11 @@ static void handle_ctrl_request(int port, uint16_t head, #endif case PD_CTRL_REJECT: case PD_CTRL_WAIT: - if (pd[port].task_state == PD_STATE_DR_SWAP) + if (pd[port].task_state == PD_STATE_DR_SWAP) { + if (type == PD_CTRL_WAIT) /* try again ... */ + pd[port].flags |= PD_FLAGS_CHECK_DR_ROLE; set_state(port, READY_RETURN_STATE(port)); + } #ifdef CONFIG_USBC_VCONN_SWAP else if (pd[port].task_state == PD_STATE_VCONN_SWAP_SEND) set_state(port, READY_RETURN_STATE(port)); |