diff options
Diffstat (limited to 'common/usb_pd_policy.c')
-rw-r--r-- | common/usb_pd_policy.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c index abb763fe4b..837ef2f5fd 100644 --- a/common/usb_pd_policy.c +++ b/common/usb_pd_policy.c @@ -225,6 +225,12 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) case CMD_ENTER_MODE: func = svdm_rsp.enter_mode; break; + case CMD_DP_STATUS: + func = svdm_rsp.amode->status; + break; + case CMD_DP_CONFIG: + func = svdm_rsp.amode->config; + break; case CMD_EXIT_MODE: func = svdm_rsp.exit_mode; break; @@ -232,12 +238,13 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) if (func) rsize = func(port, payload); else /* not supported : NACK it */ - rsize = 1; - if (rsize > 1) + rsize = 0; + if (rsize >= 1) payload[0] |= VDO_CMDT(CMDT_RSP_ACK); - else if (rsize == 1) + else if (!rsize) { payload[0] |= VDO_CMDT(CMDT_RSP_NAK); - else { + rsize = 1; + } else { payload[0] |= VDO_CMDT(CMDT_RSP_BUSY); rsize = 1; } @@ -259,6 +266,14 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) rsize = dfp_enter_mode(port, payload); break; case CMD_ENTER_MODE: + if (pe[port].amode.index != -1) + rsize = pe[port].amode.fx->status(port, + payload); + break; + case CMD_DP_STATUS: + rsize = pe[port].amode.fx->config(port, payload); + break; + case CMD_DP_CONFIG: rsize = 0; break; case CMD_EXIT_MODE: |