Calculate the correct address offset values for alpha and color key
control registers

Signed-off-by: Leela Krishna Amudala <l.krishna at samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fimd.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c 
b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 9537761..71f4176 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -41,7 +41,7 @@
 /* size control register for hardware window 0. */
 #define VIDOSD_C_SIZE_W0       (VIDOSD_BASE + 0x08)
 /* alpha control register for hardware window 1 ~ 4. */
-#define VIDOSD_C(win)          (VIDOSD_BASE + 0x18 + (win) * 16)
+#define VIDOSD_C(win)          (VIDOSD_BASE + 0x08 + (win) * 16)
 /* size control register for hardware window 1 ~ 4. */
 #define VIDOSD_D(win)          (VIDOSD_BASE + 0x0C + (win) * 16)

@@ -50,9 +50,9 @@
 #define VIDWx_BUF_SIZE(win, buf)       (VIDW_BUF_SIZE(buf) + (win) * 4)

 /* color key control register for hardware window 1 ~ 4. */
-#define WKEYCON0_BASE(x)               ((WKEYCON0 + 0x140) + (x * 8))
+#define WKEYCON0_BASE(x)               ((WKEYCON0 + 0x140) + ((x - 1) * 8))
 /* color key value register for hardware window 1 ~ 4. */
-#define WKEYCON1_BASE(x)               ((WKEYCON1 + 0x140) + (x * 8))
+#define WKEYCON1_BASE(x)               ((WKEYCON1 + 0x140) + ((x - 1) * 8))

 /* FIMD has totally five hardware windows. */
 #define WINDOWS_NR     5
@@ -782,7 +782,8 @@ static void fimd_clear_win(struct fimd_context *ctx, int 
win)
        writel(0, ctx->regs + WINCON(win));
        writel(0, ctx->regs + VIDOSD_A(win));
        writel(0, ctx->regs + VIDOSD_B(win));
-       writel(0, ctx->regs + VIDOSD_C(win));
+       if (win != 0)
+               writel(0, ctx->regs + VIDOSD_C(win));

        if (win == 1 || win == 2)
                writel(0, ctx->regs + VIDOSD_D(win));
-- 
1.8.0

Reply via email to