diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 2db4a6ddd137..b8630046b4e2 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2728,7 +2728,7 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, struct sde_rm_hw_iter dsc_iter, pp_iter; struct sde_rm_hw_request request_hw; enum sde_intf_mode intf_mode; - + bool is_cmd_mode = false; int i = 0, ret; if (!drm_enc) { @@ -2744,6 +2744,9 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, sde_enc = to_sde_encoder_virt(drm_enc); SDE_DEBUG_ENC(sde_enc, "\n"); + if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) + is_cmd_mode = true; + priv = drm_enc->dev->dev_private; sde_kms = to_sde_kms(priv->kms); connector_list = &sde_kms->dev->mode_config.connector_list; @@ -2793,7 +2796,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, /* release resources before seamless mode change */ if (msm_is_mode_seamless_dms(adj_mode) || - msm_is_mode_seamless_dyn_clk(adj_mode)) { + (msm_is_mode_seamless_dyn_clk(adj_mode) && + is_cmd_mode)) { /* restore resource state before releasing them */ ret = sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_PRE_MODESET); @@ -2868,7 +2872,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, /* update resources after seamless mode change */ if (msm_is_mode_seamless_dms(adj_mode) || - msm_is_mode_seamless_dyn_clk(adj_mode)) + (msm_is_mode_seamless_dyn_clk(adj_mode) && + is_cmd_mode)) sde_encoder_resource_control(&sde_enc->base, SDE_ENC_RC_EVENT_POST_MODESET); }