static void overlayfb_enable(struct mxsfb_layer *ofb)
{
- uint32_t as_ctrl = 0x0;
struct mxsfb_info *fbi = ofb->fbi;
lock_fb_info(fbi->fb_info);
writel(CTRL1_FIFO_CLEAR, fbi->base + LCDC_CTRL1 + REG_SET);
}
- /* enable AS */
- as_ctrl = readl(fbi->base + LCDC_AS_CTRL);
- as_ctrl |= 0x1;
-
- writel(as_ctrl, fbi->base + LCDC_AS_CTRL);
+ writel(0x1, fbi->base + LCDC_AS_CTRL + REG_SET);
if (fbi->cur_blank == FB_BLANK_UNBLANK) {
writel(CTRL1_FIFO_CLEAR, fbi->base + LCDC_CTRL1 + REG_CLR);
static void overlayfb_disable(struct mxsfb_layer *ofb)
{
- uint32_t as_ctrl = 0x0;
struct mxsfb_info *fbi = ofb->fbi;
- writel(as_ctrl, fbi->base + LCDC_AS_CTRL);
- writel(0x0, fbi->base + LCDC_AS_NEXT_BUF);
+ writel(0x1, fbi->base + LCDC_AS_CTRL + REG_CLR);
}
static void overlayfb_setup(struct mxsfb_layer *ofb)
static int overlayfb_open(struct fb_info *info, int user)
{
struct mxsfb_layer *ofb = (struct mxsfb_layer*)info->par;
+ struct mxsfb_info *fbi = ofb->fbi;
- if (ofb->usage++ == 0)
- info->var.activate &= ~FB_ACTIVATE_NXTOPEN;
+ if (ofb->usage++ == 0) {
+ memset((void*)&info->var, 0x0, sizeof(info->var));
+
+ ofb->ol_fb->var.xres = fbi->fb_info->var.xres;
+ ofb->ol_fb->var.yres = fbi->fb_info->var.yres;
+ ofb->ol_fb->var.xres_virtual = fbi->fb_info->var.xres_virtual;
+ ofb->ol_fb->var.yres_virtual = fbi->fb_info->var.yres;
+ ofb->ol_fb->var.bits_per_pixel = fbi->fb_info->var.bits_per_pixel;
+ ofb->ol_fb->var.vmode = FB_VMODE_NONINTERLACED;
+ }
return 0;
}
static int overlayfb_release(struct fb_info *info, int user)
{
struct mxsfb_layer *ofb = (struct mxsfb_layer*)info->par;
+ struct mxsfb_info *fbi = ofb->fbi;
BUG_ON(!ofb->usage);
ofb->ops->disable(ofb);
ofb->blank_state = -1;
- info->var.activate = FB_ACTIVATE_NXTOPEN;
+ writel(0x0, fbi->base + LCDC_AS_CTRL);
+ writel(0x0, fbi->base + LCDC_AS_NEXT_BUF);
}
return 0;