diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index fbe000a73a..aeff5967cc 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -6375,10 +6375,12 @@ int dsi_display_prepare(struct dsi_display *display) dsi_display_ctrl_isr_configure(display, true); if (mode->dsi_mode_flags & DSI_MODE_FLAG_DMS) { - if (display->is_cont_splash_enabled) { - pr_err("DMS is not supposed to be set on first frame\n"); + if (display->is_cont_splash_enabled && + display->config.panel_mode == DSI_OP_VIDEO_MODE) { + pr_err("DMS not supported on first frame\n"); return -EINVAL; } + /* update dsi ctrl for new mode */ rc = dsi_display_pre_switch(display); if (rc) diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 9f18b09830..69b322fc22 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -4602,7 +4602,7 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc, struct sde_encoder_phys *phys; struct sde_kms *sde_kms = 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; 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_enc->cur_master->connector); - - if (sde_enc->cur_master && sde_enc->cur_master->connector && - sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) + is_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->cur_master->connector->state, 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 && - !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); if (rc) { SDE_ERROR_ENC(sde_enc, "failed to setup DSC: %d\n", rc);