Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db20cbe2 authored by Ritesh Kumar's avatar Ritesh Kumar Committed by Gerrit - the friendly Code Review server
Browse files

drm/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: default avatarRitesh Kumar <riteshk@codeaurora.org>
parent 70f35db1
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2674,6 +2674,7 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
	struct sde_connector *sde_conn = NULL;
	struct sde_rm_hw_iter dsc_iter, pp_iter;
	struct sde_rm_hw_request request_hw;
	bool is_cmd_mode = false;
	int i = 0, ret;

	if (!drm_enc) {
@@ -2692,6 +2693,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
	priv = drm_enc->dev->dev_private;
	sde_kms = to_sde_kms(priv->kms);
	connector_list = &sde_kms->dev->mode_config.connector_list;
	is_cmd_mode = sde_enc->disp_info.capabilities &
					MSM_DISPLAY_CAP_CMD_MODE;

	SDE_EVT32(DRMID(drm_enc));

@@ -2733,7 +2736,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);
@@ -2808,7 +2812,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);
}