static void decon_shadow_protect_win(struct decon_context *ctx, int win, bool protect) { u32 val; val = readl(ctx->addr + DECON_SHADOWCON); if (protect) val |= SHADOWCON_Wx_PROTECT(win); else val &= ~SHADOWCON_Wx_PROTECT(win); writel(val, ctx->addr + DECON_SHADOWCON); }
static void decon_clear_channels(struct exynos_drm_crtc *crtc) { struct decon_context *ctx = crtc->ctx; int win, i, ret; u32 val; DRM_DEBUG_KMS("%s\n", __FILE__); for (i = 0; i < ARRAY_SIZE(decon_clks_name); i++) { ret = clk_prepare_enable(ctx->clks[i]); if (ret < 0) goto err; } for (win = 0; win < WINDOWS_NR; win++) { /* shadow update disable */ val = readl(ctx->addr + DECON_SHADOWCON); val |= SHADOWCON_Wx_PROTECT(win); writel(val, ctx->addr + DECON_SHADOWCON); /* window disable */ val = readl(ctx->addr + DECON_WINCONx(win)); val &= ~WINCONx_ENWIN_F; writel(val, ctx->addr + DECON_WINCONx(win)); /* shadow update enable */ val = readl(ctx->addr + DECON_SHADOWCON); val &= ~SHADOWCON_Wx_PROTECT(win); writel(val, ctx->addr + DECON_SHADOWCON); /* standalone update */ val = readl(ctx->addr + DECON_UPDATE); val |= STANDALONE_UPDATE_F; writel(val, ctx->addr + DECON_UPDATE); } /* TODO: wait for possible vsync */ msleep(50); err: while (--i >= 0) clk_disable_unprepare(ctx->clks[i]); }
static void decon_shadow_protect_win(struct decon_context *ctx, int win, bool protect) { decon_set_bits(ctx, DECON_SHADOWCON, SHADOWCON_Wx_PROTECT(win), protect ? ~0 : 0); }