summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/usb_pd_protocol.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 36350449a0..d5bda7c6f3 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -540,6 +540,7 @@ static void handle_data_request(void *ctxt, uint16_t head, uint32_t *payload)
static void handle_ctrl_request(void *ctxt, uint16_t head, uint32_t *payload)
{
int type = PD_HEADER_TYPE(head);
+ int res;
switch (type) {
case PD_CTRL_GOOD_CRC:
@@ -549,7 +550,9 @@ static void handle_ctrl_request(void *ctxt, uint16_t head, uint32_t *payload)
/* Nothing else to do */
break;
case PD_CTRL_GET_SOURCE_CAP:
- send_source_cap(ctxt);
+ res = send_source_cap(ctxt);
+ if ((res >= 0) && (pd_task_state == PD_STATE_SRC_DISCOVERY))
+ pd_task_state = PD_STATE_SRC_NEGOCIATE;
break;
#ifdef CONFIG_USB_PD_DUAL_ROLE
case PD_CTRL_GET_SINK_CAP: