static bool tcpm_send_queued_message(struct tcpm_port *port)
 {
        enum pd_msg_request queued_message;
+       int ret;
 
        do {
                queued_message = port->queued_message;
                        tcpm_pd_send_sink_caps(port);
                        break;
                case PD_MSG_DATA_SOURCE_CAP:
-                       tcpm_pd_send_source_caps(port);
+                       ret = tcpm_pd_send_source_caps(port);
+                       if (ret < 0) {
+                               tcpm_log(port,
+                                        "Unable to send src caps, ret=%d",
+                                        ret);
+                               tcpm_set_state(port, SOFT_RESET_SEND, 0);
+                       } else if (port->pwr_role == TYPEC_SOURCE) {
+                               tcpm_set_state(port, HARD_RESET_SEND,
+                                              PD_T_SENDER_RESPONSE);
+                       }
                        break;
                default:
                        break;