diff options
author | Abe Levkoy <alevkoy@chromium.org> | 2022-06-24 13:53:14 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-06-29 21:24:32 +0000 |
commit | 85990309dc63d80cf3f1b940df2dc06129fef2e9 (patch) | |
tree | f9e8ff5f09cca9abe4bf0276e55be2845b2ba024 | |
parent | f1c50a774a609b8dc3d616071824dbc4ef78af87 (diff) | |
download | chrome-ec-85990309dc63d80cf3f1b940df2dc06129fef2e9.tar.gz |
zephyr: emul: Support Exit Mode in PD partner
Respond to SOP Exit Mode REQ VDMs in USB PD partner emulator. For now,
only support exiting DisplayPort mode.
This supports testing Exit Mode flows in the TCPM.
BUG=b:235984702
TEST=zmake testall
BRANCH=none
Signed-off-by: Abe Levkoy <alevkoy@chromium.org>
Change-Id: I92ee8046932c076f99c103523ec9873089cf1a85
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3724161
Reviewed-by: Aaron Massey <aaronmassey@google.com>
-rw-r--r-- | zephyr/emul/tcpc/emul_tcpci_partner_common.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_common.c b/zephyr/emul/tcpc/emul_tcpci_partner_common.c index 21725f11f0..9c9d3d8268 100644 --- a/zephyr/emul/tcpc/emul_tcpci_partner_common.c +++ b/zephyr/emul/tcpc/emul_tcpci_partner_common.c @@ -647,6 +647,24 @@ tcpci_partner_common_vdm_handler(struct tcpci_partner_data *data, 0); } return TCPCI_PARTNER_COMMON_MSG_HANDLED; + case CMD_EXIT_MODE: + if (PD_VDO_VID(vdm_header) == USB_SID_DISPLAYPORT) { + uint32_t response_vdm_header; + + if (data->displayport_configured) { + data->displayport_configured = false; + response_vdm_header = VDO( + USB_SID_DISPLAYPORT, true, + VDO_CMDT(CMDT_RSP_ACK) | CMD_EXIT_MODE); + } else { + response_vdm_header = VDO( + USB_SID_DISPLAYPORT, true, + VDO_CMDT(CMDT_RSP_NAK) | CMD_EXIT_MODE); + } + tcpci_partner_send_data_msg(data, PD_DATA_VENDOR_DEF, + &response_vdm_header, 1, 0); + } + return TCPCI_PARTNER_COMMON_MSG_HANDLED; case CMD_DP_STATUS: if (data->dp_status_vdos > 0 && (PD_VDO_VID(vdm_header) == USB_SID_DISPLAYPORT)) { |