Merge "disp: msm: dp: clear connected state if switch config fails"

This commit is contained in:
qctecmdr
2023-05-31 15:48:31 -07:00
committed by Gerrit - the friendly Code Review server

파일 보기

@@ -1204,7 +1204,7 @@ static void dp_display_host_deinit(struct dp_display_private *dp)
static int dp_display_process_hpd_high(struct dp_display_private *dp)
{
int rc = -EINVAL;
unsigned long wait_timeout_ms;
unsigned long wait_timeout_ms = 0;
unsigned long t;
SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_ENTRY, dp->state);
@@ -1224,10 +1224,8 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
if (!dp->debug->sim_mode && !dp->no_aux_switch && !dp->parser->gpio_aux_switch
&& dp->aux_switch_node && dp->aux->switch_configure) {
rc = dp->aux->switch_configure(dp->aux, true, dp->hpd->orientation);
if (rc) {
mutex_unlock(&dp->session_lock);
return rc;
}
if (rc)
goto err_state;
}
/*
@@ -1255,7 +1253,7 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
*/
dp_display_state_remove(DP_STATE_CONNECTED);
}
goto end;
goto err_unlock;
}
/*
@@ -1269,14 +1267,14 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
rc = dp_display_host_ready(dp);
if (rc) {
dp_display_state_show("[ready failed]");
goto end;
goto err_state;
}
dp->link->psm_config(dp->link, &dp->panel->link_info, false);
dp->debug->psm_enabled = false;
if (!dp->dp_display.base_connector)
goto end;
goto err_unready;
rc = dp->panel->read_sink_caps(dp->panel,
dp->dp_display.base_connector, dp->hpd->multi_func);
@@ -1284,10 +1282,8 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
* ETIMEDOUT --> cable may have been removed
* ENOTCONN --> no downstream device connected
*/
if (rc == -ETIMEDOUT || rc == -ENOTCONN) {
dp_display_state_remove(DP_STATE_CONNECTED);
goto end;
}
if (rc == -ETIMEDOUT || rc == -ENOTCONN)
goto err_unready;
dp->link->process_request(dp->link);
dp->panel->handle_sink_request(dp->panel);
@@ -1296,15 +1292,13 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
rc = dp->ctrl->on(dp->ctrl, dp->mst.mst_active,
dp->panel->fec_en, dp->panel->dsc_en, false);
if (rc) {
dp_display_state_remove(DP_STATE_CONNECTED);
goto end;
}
if (rc)
goto err_mst;
dp->process_hpd_connect = false;
dp_display_set_mst_mgr_state(dp, true);
end:
mutex_unlock(&dp->session_lock);
/*
@@ -1337,13 +1331,23 @@ end:
(work_busy(&dp->attention_work) == WORK_BUSY_PENDING)) {
SDE_EVT32_EXTERNAL(dp->state, 99, jiffies_to_msecs(t));
DP_DEBUG("Attention pending, skip HPD notification\n");
goto skip_notify;
goto end;
}
if (!rc && !dp_display_state_is(DP_STATE_ABORTED))
dp_display_send_hpd_notification(dp, false);
skip_notify:
goto end;
err_mst:
dp_display_update_mst_state(dp, false);
err_unready:
dp_display_host_unready(dp);
err_state:
dp_display_state_remove(DP_STATE_CONNECTED);
err_unlock:
mutex_unlock(&dp->session_lock);
end:
SDE_EVT32_EXTERNAL(SDE_EVTLOG_FUNC_EXIT, dp->state,
wait_timeout_ms, rc);
return rc;