Lines Matching refs:ofb

609 static void overlay1fb_setup(struct pxafb_layer *ofb)  in overlay1fb_setup()  argument
611 int size = ofb->fb.fix.line_length * ofb->fb.var.yres_virtual; in overlay1fb_setup()
612 unsigned long start = ofb->video_mem_phys; in overlay1fb_setup()
613 setup_frame_dma(ofb->fbi, DMA_OV1, PAL_NONE, start, size); in overlay1fb_setup()
619 static void overlay1fb_enable(struct pxafb_layer *ofb) in overlay1fb_enable() argument
621 int enabled = lcd_readl(ofb->fbi, OVL1C1) & OVLxC1_OEN; in overlay1fb_enable()
622 uint32_t fdadr1 = ofb->fbi->fdadr[DMA_OV1] | (enabled ? 0x1 : 0); in overlay1fb_enable()
624 lcd_writel(ofb->fbi, enabled ? FBR1 : FDADR1, fdadr1); in overlay1fb_enable()
625 lcd_writel(ofb->fbi, OVL1C2, ofb->control[1]); in overlay1fb_enable()
626 lcd_writel(ofb->fbi, OVL1C1, ofb->control[0] | OVLxC1_OEN); in overlay1fb_enable()
629 static void overlay1fb_disable(struct pxafb_layer *ofb) in overlay1fb_disable() argument
633 if (!(lcd_readl(ofb->fbi, OVL1C1) & OVLxC1_OEN)) in overlay1fb_disable()
636 lccr5 = lcd_readl(ofb->fbi, LCCR5); in overlay1fb_disable()
638 lcd_writel(ofb->fbi, OVL1C1, ofb->control[0] & ~OVLxC1_OEN); in overlay1fb_disable()
640 lcd_writel(ofb->fbi, LCSR1, LCSR1_BS(1)); in overlay1fb_disable()
641 lcd_writel(ofb->fbi, LCCR5, lccr5 & ~LCSR1_BS(1)); in overlay1fb_disable()
642 lcd_writel(ofb->fbi, FBR1, ofb->fbi->fdadr[DMA_OV1] | 0x3); in overlay1fb_disable()
644 if (wait_for_completion_timeout(&ofb->branch_done, 1 * HZ) == 0) in overlay1fb_disable()
647 lcd_writel(ofb->fbi, LCCR5, lccr5); in overlay1fb_disable()
650 static void overlay2fb_setup(struct pxafb_layer *ofb) in overlay2fb_setup() argument
652 int size, div = 1, pfor = NONSTD_TO_PFOR(ofb->fb.var.nonstd); in overlay2fb_setup()
653 unsigned long start[3] = { ofb->video_mem_phys, 0, 0 }; in overlay2fb_setup()
656 size = ofb->fb.fix.line_length * ofb->fb.var.yres_virtual; in overlay2fb_setup()
657 setup_frame_dma(ofb->fbi, DMA_OV2_Y, -1, start[0], size); in overlay2fb_setup()
659 size = ofb->fb.var.xres_virtual * ofb->fb.var.yres_virtual; in overlay2fb_setup()
667 setup_frame_dma(ofb->fbi, DMA_OV2_Y, -1, start[0], size); in overlay2fb_setup()
668 setup_frame_dma(ofb->fbi, DMA_OV2_Cb, -1, start[1], size / div); in overlay2fb_setup()
669 setup_frame_dma(ofb->fbi, DMA_OV2_Cr, -1, start[2], size / div); in overlay2fb_setup()
673 static void overlay2fb_enable(struct pxafb_layer *ofb) in overlay2fb_enable() argument
675 int pfor = NONSTD_TO_PFOR(ofb->fb.var.nonstd); in overlay2fb_enable()
676 int enabled = lcd_readl(ofb->fbi, OVL2C1) & OVLxC1_OEN; in overlay2fb_enable()
677 uint32_t fdadr2 = ofb->fbi->fdadr[DMA_OV2_Y] | (enabled ? 0x1 : 0); in overlay2fb_enable()
678 uint32_t fdadr3 = ofb->fbi->fdadr[DMA_OV2_Cb] | (enabled ? 0x1 : 0); in overlay2fb_enable()
679 uint32_t fdadr4 = ofb->fbi->fdadr[DMA_OV2_Cr] | (enabled ? 0x1 : 0); in overlay2fb_enable()
682 lcd_writel(ofb->fbi, enabled ? FBR2 : FDADR2, fdadr2); in overlay2fb_enable()
684 lcd_writel(ofb->fbi, enabled ? FBR2 : FDADR2, fdadr2); in overlay2fb_enable()
685 lcd_writel(ofb->fbi, enabled ? FBR3 : FDADR3, fdadr3); in overlay2fb_enable()
686 lcd_writel(ofb->fbi, enabled ? FBR4 : FDADR4, fdadr4); in overlay2fb_enable()
688 lcd_writel(ofb->fbi, OVL2C2, ofb->control[1]); in overlay2fb_enable()
689 lcd_writel(ofb->fbi, OVL2C1, ofb->control[0] | OVLxC1_OEN); in overlay2fb_enable()
692 static void overlay2fb_disable(struct pxafb_layer *ofb) in overlay2fb_disable() argument
696 if (!(lcd_readl(ofb->fbi, OVL2C1) & OVLxC1_OEN)) in overlay2fb_disable()
699 lccr5 = lcd_readl(ofb->fbi, LCCR5); in overlay2fb_disable()
701 lcd_writel(ofb->fbi, OVL2C1, ofb->control[0] & ~OVLxC1_OEN); in overlay2fb_disable()
703 lcd_writel(ofb->fbi, LCSR1, LCSR1_BS(2)); in overlay2fb_disable()
704 lcd_writel(ofb->fbi, LCCR5, lccr5 & ~LCSR1_BS(2)); in overlay2fb_disable()
705 lcd_writel(ofb->fbi, FBR2, ofb->fbi->fdadr[DMA_OV2_Y] | 0x3); in overlay2fb_disable()
706 lcd_writel(ofb->fbi, FBR3, ofb->fbi->fdadr[DMA_OV2_Cb] | 0x3); in overlay2fb_disable()
707 lcd_writel(ofb->fbi, FBR4, ofb->fbi->fdadr[DMA_OV2_Cr] | 0x3); in overlay2fb_disable()
709 if (wait_for_completion_timeout(&ofb->branch_done, 1 * HZ) == 0) in overlay2fb_disable()
728 struct pxafb_layer *ofb = container_of(info, struct pxafb_layer, fb); in overlayfb_open() local
734 if (ofb->usage++ == 0) { in overlayfb_open()
737 fb_blank(&ofb->fbi->fb, FB_BLANK_UNBLANK); in overlayfb_open()
746 struct pxafb_layer *ofb = container_of(info, struct pxafb_layer, fb); in overlayfb_release() local
748 if (ofb->usage == 1) { in overlayfb_release()
749 ofb->ops->disable(ofb); in overlayfb_release()
750 ofb->fb.var.height = -1; in overlayfb_release()
751 ofb->fb.var.width = -1; in overlayfb_release()
752 ofb->fb.var.xres = ofb->fb.var.xres_virtual = 0; in overlayfb_release()
753 ofb->fb.var.yres = ofb->fb.var.yres_virtual = 0; in overlayfb_release()
755 ofb->usage--; in overlayfb_release()
763 struct pxafb_layer *ofb = container_of(info, struct pxafb_layer, fb); in overlayfb_check_var() local
764 struct fb_var_screeninfo *base_var = &ofb->fbi->fb.var; in overlayfb_check_var()
776 if (ofb->id == OVERLAY1 && pfor != 0) in overlayfb_check_var()
812 static int overlayfb_check_video_memory(struct pxafb_layer *ofb) in overlayfb_check_video_memory() argument
814 struct fb_var_screeninfo *var = &ofb->fb.var; in overlayfb_check_video_memory()
826 ofb->fb.fix.line_length = var->xres_virtual * bpp / 8; in overlayfb_check_video_memory()
828 size = PAGE_ALIGN(ofb->fb.fix.line_length * var->yres_virtual); in overlayfb_check_video_memory()
830 if (ofb->video_mem) { in overlayfb_check_video_memory()
831 if (ofb->video_mem_size >= size) in overlayfb_check_video_memory()
839 struct pxafb_layer *ofb = container_of(info, struct pxafb_layer, fb); in overlayfb_set_par() local
843 ret = overlayfb_check_video_memory(ofb); in overlayfb_set_par()
852 ofb->control[0] = OVLxC1_PPL(var->xres) | OVLxC1_LPO(var->yres) | in overlayfb_set_par()
854 ofb->control[1] = OVLxC2_XPOS(xpos) | OVLxC2_YPOS(ypos); in overlayfb_set_par()
856 if (ofb->id == OVERLAY2) in overlayfb_set_par()
857 ofb->control[1] |= OVL2C2_PFOR(pfor); in overlayfb_set_par()
859 ofb->ops->setup(ofb); in overlayfb_set_par()
860 ofb->ops->enable(ofb); in overlayfb_set_par()
872 static void init_pxafb_overlay(struct pxafb_info *fbi, struct pxafb_layer *ofb, in init_pxafb_overlay() argument
875 sprintf(ofb->fb.fix.id, "overlay%d", id + 1); in init_pxafb_overlay()
877 ofb->fb.fix.type = FB_TYPE_PACKED_PIXELS; in init_pxafb_overlay()
878 ofb->fb.fix.xpanstep = 0; in init_pxafb_overlay()
879 ofb->fb.fix.ypanstep = 1; in init_pxafb_overlay()
881 ofb->fb.var.activate = FB_ACTIVATE_NOW; in init_pxafb_overlay()
882 ofb->fb.var.height = -1; in init_pxafb_overlay()
883 ofb->fb.var.width = -1; in init_pxafb_overlay()
884 ofb->fb.var.vmode = FB_VMODE_NONINTERLACED; in init_pxafb_overlay()
886 ofb->fb.fbops = &overlay_fb_ops; in init_pxafb_overlay()
887 ofb->fb.flags = FBINFO_FLAG_DEFAULT; in init_pxafb_overlay()
888 ofb->fb.node = -1; in init_pxafb_overlay()
889 ofb->fb.pseudo_palette = NULL; in init_pxafb_overlay()
891 ofb->id = id; in init_pxafb_overlay()
892 ofb->ops = &ofb_ops[id]; in init_pxafb_overlay()
893 ofb->usage = 0; in init_pxafb_overlay()
894 ofb->fbi = fbi; in init_pxafb_overlay()
895 init_completion(&ofb->branch_done); in init_pxafb_overlay()
907 struct pxafb_layer *ofb) in pxafb_overlay_map_video_memory() argument
912 ofb->video_mem = alloc_pages_exact(PAGE_ALIGN(pxafb->video_mem_size), in pxafb_overlay_map_video_memory()
914 if (ofb->video_mem == NULL) in pxafb_overlay_map_video_memory()
917 ofb->video_mem_phys = virt_to_phys(ofb->video_mem); in pxafb_overlay_map_video_memory()
918 ofb->video_mem_size = PAGE_ALIGN(pxafb->video_mem_size); in pxafb_overlay_map_video_memory()
920 mutex_lock(&ofb->fb.mm_lock); in pxafb_overlay_map_video_memory()
921 ofb->fb.fix.smem_start = ofb->video_mem_phys; in pxafb_overlay_map_video_memory()
922 ofb->fb.fix.smem_len = pxafb->video_mem_size; in pxafb_overlay_map_video_memory()
923 mutex_unlock(&ofb->fb.mm_lock); in pxafb_overlay_map_video_memory()
925 ofb->fb.screen_base = ofb->video_mem; in pxafb_overlay_map_video_memory()
938 struct pxafb_layer *ofb = &fbi->overlay[i]; in pxafb_overlay_init() local
939 init_pxafb_overlay(fbi, ofb, i); in pxafb_overlay_init()
940 ret = register_framebuffer(&ofb->fb); in pxafb_overlay_init()
945 ret = pxafb_overlay_map_video_memory(fbi, ofb); in pxafb_overlay_init()
950 unregister_framebuffer(&ofb->fb); in pxafb_overlay_init()
953 ofb->registered = 1; in pxafb_overlay_init()
970 struct pxafb_layer *ofb = &fbi->overlay[i]; in pxafb_overlay_exit() local
971 if (ofb->registered) { in pxafb_overlay_exit()
972 if (ofb->video_mem) in pxafb_overlay_exit()
973 free_pages_exact(ofb->video_mem, in pxafb_overlay_exit()
974 ofb->video_mem_size); in pxafb_overlay_exit()
975 unregister_framebuffer(&ofb->fb); in pxafb_overlay_exit()