From ecfc7d10e8a450c4bb53529570958ff1881b2418 Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Mon, 4 Feb 2019 17:10:59 +0530 Subject: [PATCH] disp: msm: sde: Fix suspend-resume issue after switching dsi clk Fixes suspend-resume not working after switching dsi clk for video mode. While switching the dsi clk, FLAG_SEAMLESS_DYN_CLK is set leading to enable dsi clks which causes extra refcount. Add check for command mode. Change-Id: I814eb9c87daf387b5d57c5a3dddf7ae1e60fe784 Signed-off-by: Ritesh Kumar --- msm/sde/sde_encoder.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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); }