summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorInki Dae <inki.dae@samsung.com>2014-09-24 00:33:11 +0900
committerInki Dae <inki.dae@samsung.com>2014-09-30 11:16:51 +0900
commit3ee5a94e2d731c737141367ad78f8527b4bdc7bc (patch)
tree7e85f9d9aa21403d61a827074f7cbc9a44f2605b /drivers/gpu/drm
parent098bf280850c7ab5da9ad31954416e945f1c4bd3 (diff)
downloadlinux-3.10-3ee5a94e2d731c737141367ad78f8527b4bdc7bc.tar.gz
linux-3.10-3ee5a94e2d731c737141367ad78f8527b4bdc7bc.tar.bz2
linux-3.10-3ee5a94e2d731c737141367ad78f8527b4bdc7bc.zip
drm/exynos: fimd: fix screen shaking issue
This patch fixes the issue that the screen is shared once resume. The issue could be incurred when overlay registers are updated by win_commit while transmitting video data. So this patch makes win_commit function wait for vsync signal if fimd is still transmitting video data before updating overlay registers. Change-Id: Ia5efff85ccad91cd6e8ff7a5e167a883c8e8d4aa Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fimd.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 6e5e1a84d72..e7cc2ab311a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -636,6 +636,25 @@ static void fimd_win_commit(struct exynos_drm_manager *mgr, int zpos)
}
/*
+ * Wait for the completion of current transmission if fimd is still
+ * transmitting video data.
+ *
+ * Below codes resolve following issue:
+ * when resumed, fimd_win_commit() could be called to update overlay
+ * relevent registers and then pae flip could be performed by userspace
+ * request. The problem is that te interrupt could occur and
+ * fimd_trigger() could be called before fimd_win_commit is called by
+ * page flip function, exynos_drm_crtc_page_flip.
+ *
+ * In this case, there is a problem that fimd_win_commit() is called by
+ * the page flip request while fimd is still transmitting video data
+ * so overlay registers are updated to new buffer. That makes screen
+ * to be shaked.
+ */
+ if (ctx->i80_if && atomic_read(&ctx->triggering))
+ fimd_wait_for_vblank(mgr);
+
+ /*
* SHADOWCON/PRTCON register is used for enabling timing.
*
* for example, once only width value of a register is set,