From: Li Jun Date: Thu, 27 Jul 2017 13:47:51 +0000 (+0800) Subject: MLK-16013-21 staging: typec: tcpm: handle pd message send failure X-Git-Tag: C0P2-H0.0--20200415~1912 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=aa2489ddb7ac7249d00c8796dfaa55a0bfe5bf00;p=linux.git MLK-16013-21 staging: typec: tcpm: handle pd message send failure If the PD message send failed, we need to do soft reset, further if soft reset failed, we have to start a hard reset. Reviewed-by: Peter Chen Signed-off-by: Li Jun --- diff --git a/drivers/staging/typec/tcpm.c b/drivers/staging/typec/tcpm.c index 73a9e3689af3..0a96c4faaa4e 100644 --- a/drivers/staging/typec/tcpm.c +++ b/drivers/staging/typec/tcpm.c @@ -1560,6 +1560,7 @@ static int tcpm_pd_send_control(struct tcpm_port *port, static bool tcpm_send_queued_message(struct tcpm_port *port) { enum pd_msg_request queued_message; + int ret = 0; do { queued_message = port->queued_message; @@ -1567,22 +1568,28 @@ static bool tcpm_send_queued_message(struct tcpm_port *port) switch (queued_message) { case PD_MSG_CTRL_WAIT: - tcpm_pd_send_control(port, PD_CTRL_WAIT); + ret = tcpm_pd_send_control(port, PD_CTRL_WAIT); break; case PD_MSG_CTRL_REJECT: - tcpm_pd_send_control(port, PD_CTRL_REJECT); + ret = tcpm_pd_send_control(port, PD_CTRL_REJECT); break; case PD_MSG_DATA_SINK_CAP: - tcpm_pd_send_sink_caps(port); + ret = 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); break; default: break; } } while (port->queued_message != PD_MSG_NONE); + if (ret) { + tcpm_set_state(port, SOFT_RESET_SEND, 0); + tcpm_log(port, "TCPM sending message failure!"); + return false; + } + if (port->delayed_state != INVALID_STATE) { if (time_is_after_jiffies(port->delayed_runtime)) { mod_delayed_work(port->wq, &port->state_machine,