Bläddra i källkod

disp: msm: sde: add delay after porches changed

This change adds 2 vsync delay after changing the timing engine
parameters namely the porches to update the refresh rate.
This ensures that panel vsync is updated as per new timing before
modifying it again.

Change-Id: I5866ea2f6f2e68bc8ce7435c4a5dbe27d8ebdd91
Signed-off-by: Abhijit Kulkarni <[email protected]>
Abhijit Kulkarni 5 år sedan
förälder
incheckning
15ae91e806
2 ändrade filer med 11 tillägg och 1 borttagningar
  1. 4 1
      msm/sde/sde_encoder_phys.h
  2. 7 0
      msm/sde/sde_encoder_phys_vid.c

+ 4 - 1
msm/sde/sde_encoder_phys.h

@@ -52,13 +52,16 @@ enum sde_enc_split_role {
  * @SDE_ENC_ENABLED:	Encoder is enabled
  * @SDE_ENC_ERR_NEEDS_HW_RESET:	Encoder is enabled, but requires a hw_reset
  *				to recover from a previous error
+ * @SDE_ENC_TIMING_ENGINE_RECONFIG: Encoder is enabled and timing engine
+ *				parameters are updated
  */
 enum sde_enc_enable_state {
 	SDE_ENC_DISABLING,
 	SDE_ENC_DISABLED,
 	SDE_ENC_ENABLING,
 	SDE_ENC_ENABLED,
-	SDE_ENC_ERR_NEEDS_HW_RESET
+	SDE_ENC_ERR_NEEDS_HW_RESET,
+	SDE_ENC_TIMING_ENGINE_RECONFIG,
 };
 
 struct sde_encoder_phys;

+ 7 - 0
msm/sde/sde_encoder_phys_vid.c

@@ -830,6 +830,8 @@ skip_flush:
 	/* ctl_flush & timing engine enable will be triggered by framework */
 	if (phys_enc->enable_state == SDE_ENC_DISABLED)
 		phys_enc->enable_state = SDE_ENC_ENABLING;
+	if (phys_enc->enable_state == SDE_ENC_ENABLED)
+		phys_enc->enable_state = SDE_ENC_TIMING_ENGINE_RECONFIG;
 }
 
 static void sde_encoder_phys_vid_destroy(struct sde_encoder_phys *phys_enc)
@@ -1120,6 +1122,11 @@ static void sde_encoder_phys_vid_handle_post_kickoff(
 				lock_flags);
 		}
 		phys_enc->enable_state = SDE_ENC_ENABLED;
+	} else if (phys_enc->enable_state == SDE_ENC_TIMING_ENGINE_RECONFIG) {
+		/* add 2 vsync delay for timing engine change */
+		sde_encoder_phys_vid_single_vblank_wait(phys_enc);
+		sde_encoder_phys_vid_single_vblank_wait(phys_enc);
+		phys_enc->enable_state = SDE_ENC_ENABLED;
 	}
 
 	avr_mode = sde_connector_get_qsync_mode(phys_enc->connector);