summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2015-07-02 08:14:58 +0200
committerStefan Agner <stefan.agner@toradex.com>2015-07-02 09:21:19 +0200
commitbb2725c66b7d48698f2fd663314b80aef44e00f4 (patch)
tree7d65b5382614e112286fb9f603a0a67d6959456c
parent8f30ee5981b6cc2014c0eb9e4506192db7918f29 (diff)
video: fsl-dcu-fb: use automatic update mode
The DCU provides two register update methods: Manual using READREG and automatic using MODE. Tests showed that the manual mode leads to significant flickers on displays. This is especially disturbing when using double buffering and panning (FBIOPAN_DISPLAY ioctrl). Use the READREG mode only on initial mode setting and switch to automatic mode for any further register changes.
-rw-r--r--drivers/video/fbdev/fsl-dcu-fb.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/video/fbdev/fsl-dcu-fb.c b/drivers/video/fbdev/fsl-dcu-fb.c
index a350b034e7a0..d43c62f80cc8 100644
--- a/drivers/video/fbdev/fsl-dcu-fb.c
+++ b/drivers/video/fbdev/fsl-dcu-fb.c
@@ -299,6 +299,11 @@ static int enable_panel(struct fb_info *info)
dcufb->reg_base + DCU_CTRLDESCLN_9(mfbi->index));
writel(DCU_UPDATE_MODE_READREG, dcufb->reg_base + DCU_UPDATE_MODE);
+
+ /* Wait until transfer is complete and switch to automatic updates */
+ while (readl(dcufb->reg_base + DCU_UPDATE_MODE) & DCU_UPDATE_MODE_READREG);
+ writel(DCU_UPDATE_MODE_MODE, dcufb->reg_base + DCU_UPDATE_MODE);
+
return 0;
}
@@ -333,6 +338,7 @@ static int disable_panel(struct fb_info *info)
writel(DCU_CTRLDESCLN_9_BG_BCOLOR(0),
dcufb->reg_base + DCU_CTRLDESCLN_9(mfbi->index));
+ /* Clear Mode flag and schedule one transfer using READREG */
writel(DCU_UPDATE_MODE_READREG, dcufb->reg_base + DCU_UPDATE_MODE);
return 0;
}
@@ -650,7 +656,6 @@ static int fsl_dcu_pan_display(struct fb_var_screeninfo *var,
addr = fsl_dcu_get_offset(info);
writel(addr, dcufb->reg_base + DCU_CTRLDESCLN_3(mfbi->index));
- writel(DCU_UPDATE_MODE_READREG, dcufb->reg_base + DCU_UPDATE_MODE);
return 0;
}