diff options
author | Li Jun <jun.li@nxp.com> | 2017-07-28 18:20:42 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:27:54 +0800 |
commit | cf5506a3dd566458cc6d0615e1693e599704380a (patch) | |
tree | 1741ea41ef2755dc01367246af36579a2dc4ed34 /drivers/staging | |
parent | 84040232ea822ae2c83bfbad78151d079476d20b (diff) |
MLK-16013-37 staging: typec: Power swap force discharge for source
VBus off only means the vbus falls to be below 4v, we can use vbus
force discharge and vbus low alarm to go forward.
Reviewed-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/typec/tcpm.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/staging/typec/tcpm.c b/drivers/staging/typec/tcpm.c index 830305c22bd6..ed4abee7717b 100644 --- a/drivers/staging/typec/tcpm.c +++ b/drivers/staging/typec/tcpm.c @@ -3209,7 +3209,13 @@ static void _tcpm_pd_vbus_off(struct tcpm_port *port) break; case PR_SWAP_SRC_SNK_TRANSITION_OFF: - tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 0); + /* + * At this moment, vbus may only fall to be below 4v, + * we need wait tPSSourceOff and let vbus discharge + * finished. + */ + if (!port->tcpc->vbus_discharge) + tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 0); break; case PR_SWAP_SNK_SRC_SINK_OFF: @@ -3248,8 +3254,16 @@ static void _tcpm_vbus_discharge(struct tcpm_port *port, bool on) { tcpm_log_force(port, "%s force discharge", on ? "Enable":"Disable"); + /* + * By vbus discharge and low alarm, now we can disable + * vbus discharge. + */ if (port->tcpc && port->tcpc->vbus_discharge) port->tcpc->vbus_discharge(port->tcpc, false); + + /* We can transit to PR_SWAP_SRC_SNK_SOURCE_OFF safely */ + if (port->state == PR_SWAP_SRC_SNK_TRANSITION_OFF) + tcpm_set_state(port, PR_SWAP_SRC_SNK_SOURCE_OFF, 0); } static void tcpm_pd_event_handler(struct work_struct *work) |