From 79b7ca0c1f85396ce59450e9a17e177ec8e4ea66 Mon Sep 17 00:00:00 2001 From: Li Jun Date: Fri, 28 Jul 2017 17:30:50 +0800 Subject: [PATCH] MLK-16013-32 staging: typec: refine source to sink swap handling To early start sink power after source turn off vbus, move the set power role after vbus is turned off in PR_SWAP_SRC_SNK_SOURCE_OFF, also per spec, we should do error recovery if the sink side does not turn on vbus in PD_T_PS_SOURCE_ON. Reviewed-by: Peter Chen Signed-off-by: Li Jun --- drivers/staging/typec/tcpm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/typec/tcpm.c b/drivers/staging/typec/tcpm.c index 59f891d863d2..dbb7b4bf3cea 100644 --- a/drivers/staging/typec/tcpm.c +++ b/drivers/staging/typec/tcpm.c @@ -2652,14 +2652,14 @@ static void run_state_machine(struct tcpm_port *port) break; case PR_SWAP_SRC_SNK_SOURCE_OFF: tcpm_set_cc(port, TYPEC_CC_RD); + tcpm_set_pwr_role(port, TYPEC_SINK); if (tcpm_pd_send_control(port, PD_CTRL_PS_RDY)) { tcpm_set_state(port, ERROR_RECOVERY, 0); break; } - tcpm_set_state_cond(port, SNK_UNATTACHED, PD_T_PS_SOURCE_ON); + tcpm_set_state_cond(port, ERROR_RECOVERY, PD_T_PS_SOURCE_ON); break; case PR_SWAP_SRC_SNK_SINK_ON: - tcpm_set_pwr_role(port, TYPEC_SINK); tcpm_swap_complete(port, 0); tcpm_set_state(port, SNK_STARTUP, 0); break; -- 2.17.1