summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbe Levkoy <alevkoy@chromium.org>2022-06-24 13:53:14 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-06-29 21:24:32 +0000
commit85990309dc63d80cf3f1b940df2dc06129fef2e9 (patch)
treef9e8ff5f09cca9abe4bf0276e55be2845b2ba024
parentf1c50a774a609b8dc3d616071824dbc4ef78af87 (diff)
downloadchrome-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.c18
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)) {