disp: msm: dp: perform host_init/deinit to reset abort
When doing multiple immediate plug-unplug, the DP display driver is waiting for a link training to exhaust the retry count before processing the disconnect request while flushing the connect_work. The driver should stop link training and exit if the link is disconnected. This change will use the ctrl_aborted flag to early return from link training and perform the host init/deinit and host ready/unready in pairs while handling connect/disconnect to reset the abort flags for the next connect. Change-Id: If321136ecf12ab2f67d13ef841f1590142aad406 Signed-off-by: Sankeerth Billakanti <sbillaka@codeaurora.org>
This commit is contained in:
parent
d236dbd5e0
commit
e7780e7526
@ -1280,11 +1280,14 @@ static int dp_ctrl_on(struct dp_ctrl *dp_ctrl, bool mst_mode,
|
|||||||
|
|
||||||
ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
|
ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
|
||||||
|
|
||||||
atomic_set(&ctrl->aborted, 0);
|
|
||||||
|
|
||||||
if (ctrl->power_on)
|
if (ctrl->power_on)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
if (atomic_read(&ctrl->aborted)) {
|
||||||
|
rc = -EPERM;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ctrl->mst_mode = mst_mode;
|
ctrl->mst_mode = mst_mode;
|
||||||
if (fec_mode) {
|
if (fec_mode) {
|
||||||
ctrl->fec_mode = fec_mode;
|
ctrl->fec_mode = fec_mode;
|
||||||
|
@ -859,7 +859,7 @@ static int dp_display_process_hpd_high(struct dp_display_private *dp)
|
|||||||
|
|
||||||
dp->dp_display.max_pclk_khz = min(dp->parser->max_pclk_khz,
|
dp->dp_display.max_pclk_khz = min(dp->parser->max_pclk_khz,
|
||||||
dp->debug->max_pclk_khz);
|
dp->debug->max_pclk_khz);
|
||||||
|
dp_display_host_init(dp);
|
||||||
dp_display_host_ready(dp);
|
dp_display_host_ready(dp);
|
||||||
|
|
||||||
dp->link->psm_config(dp->link, &dp->panel->link_info, false);
|
dp->link->psm_config(dp->link, &dp->panel->link_info, false);
|
||||||
@ -1084,6 +1084,7 @@ static int dp_display_handle_disconnect(struct dp_display_private *dp)
|
|||||||
dp_display_clean(dp);
|
dp_display_clean(dp);
|
||||||
|
|
||||||
dp_display_host_unready(dp);
|
dp_display_host_unready(dp);
|
||||||
|
dp_display_host_deinit(dp);
|
||||||
|
|
||||||
mutex_unlock(&dp->session_lock);
|
mutex_unlock(&dp->session_lock);
|
||||||
|
|
||||||
@ -1131,10 +1132,6 @@ static int dp_display_usbpd_disconnect_cb(struct device *dev)
|
|||||||
|
|
||||||
dp_display_disconnect_sync(dp);
|
dp_display_disconnect_sync(dp);
|
||||||
|
|
||||||
mutex_lock(&dp->session_lock);
|
|
||||||
dp_display_host_deinit(dp);
|
|
||||||
mutex_unlock(&dp->session_lock);
|
|
||||||
|
|
||||||
if (!dp->debug->sim_mode && !dp->parser->no_aux_switch
|
if (!dp->debug->sim_mode && !dp->parser->no_aux_switch
|
||||||
&& !dp->parser->gpio_aux_switch)
|
&& !dp->parser->gpio_aux_switch)
|
||||||
dp->aux->aux_switch(dp->aux, false, ORIENTATION_NONE);
|
dp->aux->aux_switch(dp->aux, false, ORIENTATION_NONE);
|
||||||
|
Loading…
Reference in New Issue
Block a user