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 <kabhijit@codeaurora.org>
This commit is contained in:
@@ -52,13 +52,16 @@ enum sde_enc_split_role {
|
|||||||
* @SDE_ENC_ENABLED: Encoder is enabled
|
* @SDE_ENC_ENABLED: Encoder is enabled
|
||||||
* @SDE_ENC_ERR_NEEDS_HW_RESET: Encoder is enabled, but requires a hw_reset
|
* @SDE_ENC_ERR_NEEDS_HW_RESET: Encoder is enabled, but requires a hw_reset
|
||||||
* to recover from a previous error
|
* 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 {
|
enum sde_enc_enable_state {
|
||||||
SDE_ENC_DISABLING,
|
SDE_ENC_DISABLING,
|
||||||
SDE_ENC_DISABLED,
|
SDE_ENC_DISABLED,
|
||||||
SDE_ENC_ENABLING,
|
SDE_ENC_ENABLING,
|
||||||
SDE_ENC_ENABLED,
|
SDE_ENC_ENABLED,
|
||||||
SDE_ENC_ERR_NEEDS_HW_RESET
|
SDE_ENC_ERR_NEEDS_HW_RESET,
|
||||||
|
SDE_ENC_TIMING_ENGINE_RECONFIG,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sde_encoder_phys;
|
struct sde_encoder_phys;
|
||||||
|
@@ -830,6 +830,8 @@ skip_flush:
|
|||||||
/* ctl_flush & timing engine enable will be triggered by framework */
|
/* ctl_flush & timing engine enable will be triggered by framework */
|
||||||
if (phys_enc->enable_state == SDE_ENC_DISABLED)
|
if (phys_enc->enable_state == SDE_ENC_DISABLED)
|
||||||
phys_enc->enable_state = SDE_ENC_ENABLING;
|
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)
|
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);
|
lock_flags);
|
||||||
}
|
}
|
||||||
phys_enc->enable_state = SDE_ENC_ENABLED;
|
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);
|
avr_mode = sde_connector_get_qsync_mode(phys_enc->connector);
|
||||||
|
Reference in New Issue
Block a user