disp: msm: dp: handle link maintenance failures

Audio off is done before handling link maintenance
requests from sink or receiver. After handling the
link maintenance, audio is enabled without
verifying the success condition of the link
maintenance. If the link maintenance fails, then the
DP link will not be established and source will
not send video data. So, there is no need to
enable audio.

This change will skip the audio enable portion of
the code whenever the link maintenance fails. The
sink may eventually issue another irq_hpd to retry
the link training.

Change-Id: I1e9aab07d6465ab1b5e6f92717ef7288dc85068f
Signed-off-by: Sankeerth Billakanti <sbillaka@codeaurora.org>
Este commit está contenido en:
Sankeerth Billakanti
2020-11-16 10:39:22 +05:30
cometido por Gerrit - the friendly Code Review server
padre 348e9b397c
commit 0386ae3a6b

Ver fichero

@@ -1604,6 +1604,7 @@ static void dp_display_attention_work(struct work_struct *work)
{ {
struct dp_display_private *dp = container_of(work, struct dp_display_private *dp = container_of(work,
struct dp_display_private, attention_work); struct dp_display_private, attention_work);
int rc = 0;
SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state); SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
mutex_lock(&dp->session_lock); mutex_lock(&dp->session_lock);
@@ -1673,16 +1674,20 @@ static void dp_display_attention_work(struct work_struct *work)
if (dp->link->sink_request & DP_TEST_LINK_TRAINING) { if (dp->link->sink_request & DP_TEST_LINK_TRAINING) {
SDE_EVT32_EXTERNAL(dp->state, DP_TEST_LINK_TRAINING); SDE_EVT32_EXTERNAL(dp->state, DP_TEST_LINK_TRAINING);
dp->link->send_test_response(dp->link); dp->link->send_test_response(dp->link);
dp->ctrl->link_maintenance(dp->ctrl); rc = dp->ctrl->link_maintenance(dp->ctrl);
} }
if (dp->link->sink_request & DP_LINK_STATUS_UPDATED) { if (dp->link->sink_request & DP_LINK_STATUS_UPDATED) {
SDE_EVT32_EXTERNAL(dp->state, DP_LINK_STATUS_UPDATED); SDE_EVT32_EXTERNAL(dp->state, DP_LINK_STATUS_UPDATED);
dp->ctrl->link_maintenance(dp->ctrl); rc = dp->ctrl->link_maintenance(dp->ctrl);
} }
dp_audio_enable(dp, true); if (!rc)
dp_audio_enable(dp, true);
mutex_unlock(&dp->session_lock); mutex_unlock(&dp->session_lock);
if (rc)
goto exit;
if (dp->link->sink_request & (DP_TEST_LINK_PHY_TEST_PATTERN | if (dp->link->sink_request & (DP_TEST_LINK_PHY_TEST_PATTERN |
DP_TEST_LINK_TRAINING)) DP_TEST_LINK_TRAINING))