disp: msm: dp: skip dp disconnect if already in progress

When dp disconnect is triggered, as part of the teardown process, the
driver sends a notification to audio driver and waits for the audio
driver to complete before proceeding. When back to back disconnects
are triggered currently there is no check if a disconnect is already
in progress. So the driver ends up reinitializing the signal
completion that the previous disconnect thread is waiting on causing
this issue.

This change adds a check at the beginning of disconnect handling and
bail out if a disconnect is already in progress.

Change-Id: I2eaee339408d9dbc120f8efc14d86fca0ebb0758
Signed-off-by: Rajkumar Subbiah <rsubbia@codeaurora.org>
This commit is contained in:
Rajkumar Subbiah 2020-07-13 08:53:27 -04:00
commit 2ba9bd9434

View file

@ -1335,6 +1335,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);