disp: msm: sde: skip msm_lastclose if display is stuck in splash
This change skips msm_lastclose, when splash enabled builtin-displays equals number of actual displays and are stuck in continuous splash. It fixes the issue seen with change commit 548b17185e95 ("disp: msm: send power_on event in dual display composer kill scenario"). Change-Id: I1f5417d8945db621dc20ab0a9cc0146eabae5e22 Signed-off-by: Jayaprakash Madisetty <quic_jmadiset@quicinc.com>
This commit is contained in:

committed by
Veera Sundaram Sankaran

parent
182aac6040
commit
f9578b89c9
@@ -1157,10 +1157,8 @@ static void msm_lastclose(struct drm_device *dev)
|
|||||||
priv->pending_crtcs);
|
priv->pending_crtcs);
|
||||||
|
|
||||||
rc = kms->funcs->trigger_null_flush(kms);
|
rc = kms->funcs->trigger_null_flush(kms);
|
||||||
if (rc) {
|
if (rc)
|
||||||
DRM_ERROR("null flush commit failure during lastclose\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -3896,10 +3896,18 @@ static int sde_kms_trigger_null_flush(struct msm_kms *kms)
|
|||||||
|
|
||||||
sde_kms = to_sde_kms(kms);
|
sde_kms = to_sde_kms(kms);
|
||||||
|
|
||||||
if (!sde_kms->splash_data.num_splash_displays ||
|
/* If splash handoff is done, early return*/
|
||||||
sde_kms->dsi_display_count == sde_kms->splash_data.num_splash_displays)
|
if (!sde_kms->splash_data.num_splash_displays)
|
||||||
return rc;
|
return 0;
|
||||||
|
|
||||||
|
/* If all builtin-displays are having cont splash enabled, ignore lastclose*/
|
||||||
|
if (sde_kms->dsi_display_count == sde_kms->splash_data.num_splash_displays)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Trigger NULL flush if built-in secondary/primary is stuck in splash
|
||||||
|
* while the primary/secondary is running respectively before lastclose.
|
||||||
|
*/
|
||||||
for (i = 0; i < MAX_DSI_DISPLAYS; i++) {
|
for (i = 0; i < MAX_DSI_DISPLAYS; i++) {
|
||||||
splash_display = &sde_kms->splash_data.splash_display[i];
|
splash_display = &sde_kms->splash_data.splash_display[i];
|
||||||
|
|
||||||
@@ -3912,10 +3920,12 @@ static int sde_kms_trigger_null_flush(struct msm_kms *kms)
|
|||||||
|
|
||||||
if (!rc && crtc)
|
if (!rc && crtc)
|
||||||
sde_kms_cancel_delayed_work(crtc);
|
sde_kms_cancel_delayed_work(crtc);
|
||||||
|
if (rc)
|
||||||
|
DRM_ERROR("null flush commit failure during lastclose\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _sde_kms_pm_suspend_idle_helper(struct sde_kms *sde_kms,
|
static void _sde_kms_pm_suspend_idle_helper(struct sde_kms *sde_kms,
|
||||||
|
Reference in New Issue
Block a user