diff options
-rw-r--r-- | common/usb_pd_protocol.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 79f66aa57b..c0dc2be3d0 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -1512,10 +1512,14 @@ static void handle_ctrl_request(int port, uint16_t head, /* Nothing else to do */ break; case PD_CTRL_GET_SOURCE_CAP: - res = send_source_cap(port); - if ((res >= 0) && - (pd[port].task_state == PD_STATE_SRC_DISCOVERY)) - set_state(port, PD_STATE_SRC_NEGOCIATE); + if (pd[port].task_state == PD_STATE_SRC_READY) + set_state(port, PD_STATE_SRC_DISCOVERY); + else { + res = send_source_cap(port); + if ((res >= 0) && + (pd[port].task_state == PD_STATE_SRC_DISCOVERY)) + set_state(port, PD_STATE_SRC_NEGOCIATE); + } break; case PD_CTRL_GET_SINK_CAP: #ifdef CONFIG_USB_PD_DUAL_ROLE |