|
@@ -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_iter dsc_iter, pp_iter;
|
|
struct sde_rm_hw_request request_hw;
|
|
struct sde_rm_hw_request request_hw;
|
|
enum sde_intf_mode intf_mode;
|
|
enum sde_intf_mode intf_mode;
|
|
-
|
|
|
|
|
|
+ bool is_cmd_mode = false;
|
|
int i = 0, ret;
|
|
int i = 0, ret;
|
|
|
|
|
|
if (!drm_enc) {
|
|
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_enc = to_sde_encoder_virt(drm_enc);
|
|
SDE_DEBUG_ENC(sde_enc, "\n");
|
|
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;
|
|
priv = drm_enc->dev->dev_private;
|
|
sde_kms = to_sde_kms(priv->kms);
|
|
sde_kms = to_sde_kms(priv->kms);
|
|
connector_list = &sde_kms->dev->mode_config.connector_list;
|
|
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 */
|
|
/* release resources before seamless mode change */
|
|
if (msm_is_mode_seamless_dms(adj_mode) ||
|
|
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 */
|
|
/* restore resource state before releasing them */
|
|
ret = sde_encoder_resource_control(drm_enc,
|
|
ret = sde_encoder_resource_control(drm_enc,
|
|
SDE_ENC_RC_EVENT_PRE_MODESET);
|
|
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 */
|
|
/* update resources after seamless mode change */
|
|
if (msm_is_mode_seamless_dms(adj_mode) ||
|
|
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_encoder_resource_control(&sde_enc->base,
|
|
SDE_ENC_RC_EVENT_POST_MODESET);
|
|
SDE_ENC_RC_EVENT_POST_MODESET);
|
|
}
|
|
}
|