disp: msm: allow DMS before cont-splash handoff

Currently dynamic mode-switch is allowed only after
the cont-splash handoff is handled during the first
frame. Remove this restriction for cmd-mode alone as
it can handle the use-case.

Change-Id: I5f9dc758f50a91fec0b9f710c74f2ea78c4e75eb
Signed-off-by: Veera Sundaram Sankaran <veeras@codeaurora.org>
This commit is contained in:
Veera Sundaram Sankaran
2019-05-28 14:24:46 -07:00
parent 5af1fe1891
commit bce30d62b7
2 changed files with 11 additions and 7 deletions

View File

@@ -6375,10 +6375,12 @@ int dsi_display_prepare(struct dsi_display *display)
dsi_display_ctrl_isr_configure(display, true); dsi_display_ctrl_isr_configure(display, true);
if (mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) { if (mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) {
if (display->is_cont_splash_enabled) { if (display->is_cont_splash_enabled &&
pr_err("DMS is not supposed to be set on first frame\n"); display->config.panel_mode == DSI_OP_VIDEO_MODE) {
pr_err("DMS not supported on first frame\n");
return -EINVAL; return -EINVAL;
} }
/* update dsi ctrl for new mode */ /* update dsi ctrl for new mode */
rc = dsi_display_pre_switch(display); rc = dsi_display_pre_switch(display);
if (rc) if (rc)

View File

@@ -4602,7 +4602,7 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc,
struct sde_encoder_phys *phys; struct sde_encoder_phys *phys;
struct sde_kms *sde_kms = NULL; struct sde_kms *sde_kms = NULL;
struct msm_drm_private *priv = NULL; struct msm_drm_private *priv = NULL;
bool needs_hw_reset = false; bool needs_hw_reset = false, is_cmd_mode;
int ln_cnt1 = -EINVAL, i, rc, ret = 0; int ln_cnt1 = -EINVAL, i, rc, ret = 0;
struct msm_display_info *disp_info; struct msm_display_info *disp_info;
@@ -4629,9 +4629,10 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc,
sde_connector_set_qsync_params( sde_connector_set_qsync_params(
sde_enc->cur_master->connector); sde_enc->cur_master->connector);
is_cmd_mode = sde_encoder_check_curr_mode(drm_enc,
if (sde_enc->cur_master && sde_enc->cur_master->connector && MSM_DISPLAY_CMD_MODE);
sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) if (sde_enc->cur_master && sde_enc->cur_master->connector
&& is_cmd_mode)
sde_enc->frame_trigger_mode = sde_connector_get_property( sde_enc->frame_trigger_mode = sde_connector_get_property(
sde_enc->cur_master->connector->state, sde_enc->cur_master->connector->state,
CONNECTOR_PROP_CMD_FRAME_TRIGGER_MODE); CONNECTOR_PROP_CMD_FRAME_TRIGGER_MODE);
@@ -4691,7 +4692,8 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc,
} }
if (_sde_encoder_is_dsc_enabled(drm_enc) && sde_enc->cur_master && if (_sde_encoder_is_dsc_enabled(drm_enc) && sde_enc->cur_master &&
!sde_enc->cur_master->cont_splash_enabled) { ((is_cmd_mode && sde_enc->cur_master->cont_splash_enabled) ||
!sde_enc->cur_master->cont_splash_enabled)) {
rc = _sde_encoder_dsc_setup(sde_enc, params); rc = _sde_encoder_dsc_setup(sde_enc, params);
if (rc) { if (rc) {
SDE_ERROR_ENC(sde_enc, "failed to setup DSC: %d\n", rc); SDE_ERROR_ENC(sde_enc, "failed to setup DSC: %d\n", rc);