int s3cfb_set_chroma_key(struct s3cfb_global *ctrl, int id) { struct s3cfb_window *win = ctrl->fb[id]->par; struct s3cfb_chroma *chroma = &win->chroma; u32 cfg = 0; if (id == 0) { dev_err(ctrl->dev, "[fb%d] does not support chroma key\n", id); return -EINVAL; } cfg = (S3C_KEYCON0_KEYBLEN_DISABLE | S3C_KEYCON0_DIRCON_MATCH_FG); if (chroma->enabled) cfg |= S3C_KEYCON0_KEY_ENABLE; writel(cfg, ctrl->regs + S3C_KEYCON(id)); cfg = S3C_KEYCON1_COLVAL(chroma->key); writel(cfg, ctrl->regs + S3C_KEYVAL(id)); dev_dbg(ctrl->dev, "[fb%d] chroma key: 0x%08x, %s\n", id, cfg, chroma->enabled ? "enabled" : "disabled"); return 0; }
int s3cfb_set_chroma_key(struct s3cfb_global *ctrl, int id) { struct s3c_platform_fb *pdata = to_fb_plat(ctrl->dev); struct s3cfb_window *win = ctrl->fb[id]->par; struct s3cfb_chroma *chroma = &win->chroma; u32 cfg = 0; u32 shw; if (id == 0) { dev_err(ctrl->dev, "[fb%d] does not support chroma key\n", id); return -EINVAL; } cfg = (S3C_KEYCON0_KEYBLEN_DISABLE | S3C_KEYCON0_DIRCON_MATCH_FG); if (chroma->enabled) cfg |= S3C_KEYCON0_KEY_ENABLE; if ((pdata->hw_ver == 0x62) || (pdata->hw_ver == 0x70)) { shw = readl(ctrl->regs + S3C_WINSHMAP); shw |= S3C_WINSHMAP_PROTECT(id); writel(shw, ctrl->regs + S3C_WINSHMAP); } writel(cfg, ctrl->regs + S3C_KEYCON(id)); cfg = S3C_KEYCON1_COLVAL(chroma->key); writel(cfg, ctrl->regs + S3C_KEYVAL(id)); if ((pdata->hw_ver == 0x62) || (pdata->hw_ver == 0x70)) { shw = readl(ctrl->regs + S3C_WINSHMAP); shw &= ~(S3C_WINSHMAP_PROTECT(id)); writel(shw, ctrl->regs + S3C_WINSHMAP); } dev_dbg(ctrl->dev, "[fb%d] chroma key: 0x%08x, %s\n", id, cfg, chroma->enabled ? "enabled" : "disabled"); return 0; }