diff --git a/msm/dp/dp_display.c b/msm/dp/dp_display.c index c9cc3c53319d..b929f53b0e16 100644 --- a/msm/dp/dp_display.c +++ b/msm/dp/dp_display.c @@ -1286,7 +1286,7 @@ static int dp_display_handle_disconnect(struct dp_display_private *dp) } mutex_lock(&dp->session_lock); - if (rc && dp_display_state_is(DP_STATE_ENABLED)) + if (dp_display_state_is(DP_STATE_ENABLED)) dp_display_clean(dp); dp_display_host_unready(dp); @@ -1334,6 +1334,13 @@ static int dp_display_usbpd_disconnect_cb(struct device *dev) SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state, dp->debug->psm_enabled); + /* skip if a disconnect is already in progress */ + if (dp_display_state_is(DP_STATE_ABORTED)) { + DP_DEBUG("disconnect already in progress\n"); + SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_CASE1, dp->state); + return 0; + } + if (dp->debug->psm_enabled && dp_display_state_is(DP_STATE_READY)) dp->link->psm_config(dp->link, &dp->panel->link_info, true);