summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorKuogee Hsieh <khsieh@codeaurora.org>2014-12-02 10:40:41 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:36:46 -0700
commitb088d2f6a0fca2faff67f0d37a112b7a2cc7935f (patch)
tree38ecdea5946f09bb73820b2e87b62249efc853b1 /drivers/video/fbdev
parent24794eeebd30d5f516147bd2c124966f322cf710 (diff)
msm: mdss: wait4vsync required for DFPS
There is possibility that the time of mdp flush bit set and the time of dsi flush bit are cross vsync boundary. Therefore wait4vsync is needed to guarantee both flush bits are set within same vsync period regardless of mdp revision. CRs-Fixed: 766349 Change-Id: I5fd1b7c94f119d8e5f1fdd2ceb5476ed27a730fc Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_video.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
index f05677228da6..924f280e00fc 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
@@ -902,7 +902,6 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl,
== DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP ||
pdata->panel_info.dfps_update
== DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) {
- bool wait4vsync;
unsigned long flags;
if (!ctx->timegen_en) {
pr_err("TG is OFF. DFPS mode invalid\n");
@@ -910,27 +909,24 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl,
}
/*
- * MDP INTF registers are double buffered starting from
- * MDP v1.5. No need to wait for vsync on these targets.
+ * there is possibility that the time of mdp flush
+ * bit set and the time of dsi flush bit are cross
+ * vsync boundary. therefore wait4vsync is needed
+ * to guarantee both flush bits are set within same
+ * vsync period regardless of mdp revision.
*/
- wait4vsync = (mdata->mdp_rev < MDSS_MDP_HW_REV_105);
-
- if (wait4vsync) {
- rc = mdss_mdp_video_dfps_wait4vsync(ctl);
- if (rc < 0) {
- pr_err("Error during wait4vsync\n");
- return rc;
- }
+ rc = mdss_mdp_video_dfps_wait4vsync(ctl);
+ if (rc < 0) {
+ pr_err("Error during wait4vsync\n");
+ return rc;
}
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON);
spin_lock_irqsave(&ctx->dfps_lock, flags);
- if (wait4vsync) {
- rc = mdss_mdp_video_dfps_check_line_cnt(ctl);
- if (rc < 0)
- goto exit_dfps;
- }
+ rc = mdss_mdp_video_dfps_check_line_cnt(ctl);
+ if (rc < 0)
+ goto exit_dfps;
rc = mdss_mdp_video_fps_update(ctx, pdata, new_fps);
if (rc < 0) {
@@ -959,7 +955,7 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl,
* MDP INTF registers support DB on targets
* starting from MDP v1.5.
*/
- if (!wait4vsync)
+ if (mdata->mdp_rev >= MDSS_MDP_HW_REV_105)
mdss_mdp_video_timegen_flush(ctl, sctx);
exit_dfps: