summaryrefslogtreecommitdiff
path: root/common/usb_pd_protocol.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r--common/usb_pd_protocol.c12
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