Lines Matching refs:fbi
240 struct fb_info *fbi; member
366 static void sdc_fb_init(struct mx3fb_info *fbi) in sdc_fb_init() argument
368 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_init()
377 static uint32_t sdc_fb_uninit(struct mx3fb_info *fbi) in sdc_fb_uninit() argument
379 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_uninit()
731 static int mx3fb_blank(int blank, struct fb_info *fbi);
732 static int mx3fb_map_video_memory(struct fb_info *fbi, unsigned int mem_len,
734 static int mx3fb_unmap_video_memory(struct fb_info *fbi);
741 static int mx3fb_set_fix(struct fb_info *fbi) in mx3fb_set_fix() argument
743 struct fb_fix_screeninfo *fix = &fbi->fix; in mx3fb_set_fix()
744 struct fb_var_screeninfo *var = &fbi->var; in mx3fb_set_fix()
765 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done()
775 static bool mx3fb_must_set_par(struct fb_info *fbi) in mx3fb_must_set_par() argument
777 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_must_set_par()
779 struct fb_var_screeninfo new_var = fbi->var; in mx3fb_must_set_par()
781 if ((fbi->var.activate & FB_ACTIVATE_FORCE) && in mx3fb_must_set_par()
782 (fbi->var.activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) in mx3fb_must_set_par()
795 static int __set_par(struct fb_info *fbi, bool lock) in __set_par() argument
800 struct mx3fb_info *mx3_fbi = fbi->par; in __set_par()
810 mx3fb_set_fix(fbi); in __set_par()
812 mem_len = fbi->var.yres_virtual * fbi->fix.line_length; in __set_par()
813 if (mem_len > fbi->fix.smem_len) { in __set_par()
814 if (fbi->fix.smem_start) in __set_par()
815 mx3fb_unmap_video_memory(fbi); in __set_par()
817 if (mx3fb_map_video_memory(fbi, mem_len, lock) < 0) in __set_par()
824 sg_dma_address(&sg[0]) = fbi->fix.smem_start; in __set_par()
825 sg_set_page(&sg[0], virt_to_page(fbi->screen_base), in __set_par()
826 fbi->fix.smem_len, in __set_par()
827 offset_in_page(fbi->screen_base)); in __set_par()
831 if (fbi->var.sync & FB_SYNC_HOR_HIGH_ACT) in __set_par()
833 if (fbi->var.sync & FB_SYNC_VERT_HIGH_ACT) in __set_par()
835 if (fbi->var.sync & FB_SYNC_CLK_INVERT) in __set_par()
837 if (fbi->var.sync & FB_SYNC_DATA_INVERT) in __set_par()
839 if (fbi->var.sync & FB_SYNC_OE_ACT_HIGH) in __set_par()
841 if (fbi->var.sync & FB_SYNC_CLK_IDLE_EN) in __set_par()
843 if (fbi->var.sync & FB_SYNC_CLK_SEL_EN) in __set_par()
845 if (fbi->var.sync & FB_SYNC_SHARP_MODE) in __set_par()
848 dev_dbg(fbi->device, "pixclock = %ul Hz\n", in __set_par()
849 (u32) (PICOS2KHZ(fbi->var.pixclock) * 1000UL)); in __set_par()
852 (PICOS2KHZ(fbi->var.pixclock)) * 1000UL, in __set_par()
853 fbi->var.xres, fbi->var.yres, in __set_par()
854 fbi->var.left_margin, in __set_par()
855 fbi->var.hsync_len, in __set_par()
856 fbi->var.right_margin + in __set_par()
857 fbi->var.hsync_len, in __set_par()
858 fbi->var.upper_margin, in __set_par()
859 fbi->var.vsync_len, in __set_par()
860 fbi->var.lower_margin + in __set_par()
861 fbi->var.vsync_len, sig_cfg) != 0) { in __set_par()
862 dev_err(fbi->device, in __set_par()
872 video->out_pixel_fmt = bpp_to_pixfmt(fbi->var.bits_per_pixel); in __set_par()
873 video->out_width = fbi->var.xres; in __set_par()
874 video->out_height = fbi->var.yres; in __set_par()
875 video->out_stride = fbi->var.xres_virtual; in __set_par()
893 mx3_fbi->cur_var = fbi->var; in __set_par()
905 static int mx3fb_set_par(struct fb_info *fbi) in mx3fb_set_par() argument
907 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_set_par()
916 ret = mx3fb_must_set_par(fbi) ? __set_par(fbi, true) : 0; in mx3fb_set_par()
928 static int mx3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *fbi) in mx3fb_check_var() argument
930 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_check_var()
934 dev_dbg(fbi->device, "%s\n", __func__); in mx3fb_check_var()
1006 dev_dbg(fbi->device, "pixclock set for 60Hz refresh = %u ps\n", in mx3fb_check_var()
1030 unsigned int trans, struct fb_info *fbi) in mx3fb_setcolreg() argument
1032 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_setcolreg()
1036 dev_dbg(fbi->device, "%s, regno = %u\n", __func__, regno); in mx3fb_setcolreg()
1043 if (fbi->var.grayscale) in mx3fb_setcolreg()
1046 switch (fbi->fix.visual) { in mx3fb_setcolreg()
1053 u32 *pal = fbi->pseudo_palette; in mx3fb_setcolreg()
1055 val = chan_to_field(red, &fbi->var.red); in mx3fb_setcolreg()
1056 val |= chan_to_field(green, &fbi->var.green); in mx3fb_setcolreg()
1057 val |= chan_to_field(blue, &fbi->var.blue); in mx3fb_setcolreg()
1074 static void __blank(int blank, struct fb_info *fbi) in __blank() argument
1076 struct mx3fb_info *mx3_fbi = fbi->par; in __blank()
1097 memset((char *)fbi->screen_base, 0, fbi->fix.smem_len); in __blank()
1112 static int mx3fb_blank(int blank, struct fb_info *fbi) in mx3fb_blank() argument
1114 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_blank()
1116 dev_dbg(fbi->device, "%s, blank = %d, base %p, len %u\n", __func__, in mx3fb_blank()
1117 blank, fbi->screen_base, fbi->fix.smem_len); in mx3fb_blank()
1123 __blank(blank, fbi); in mx3fb_blank()
1137 struct fb_info *fbi) in mx3fb_pan_display() argument
1139 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_pan_display()
1149 dev_dbg(fbi->device, "%s [%c]\n", __func__, in mx3fb_pan_display()
1153 dev_dbg(fbi->device, "x panning not supported\n"); in mx3fb_pan_display()
1164 y_bottom += fbi->var.yres; in mx3fb_pan_display()
1166 if (y_bottom > fbi->var.yres_virtual) in mx3fb_pan_display()
1171 offset = var->yoffset * fbi->fix.line_length in mx3fb_pan_display()
1172 + var->xoffset * (fbi->var.bits_per_pixel / 8); in mx3fb_pan_display()
1173 base = fbi->fix.smem_start + offset; in mx3fb_pan_display()
1175 dev_dbg(fbi->device, "Updating SDC BG buf %d address=0x%08lX\n", in mx3fb_pan_display()
1189 dev_info(fbi->device, "Panning failed due to %s\n", ret < 0 ? in mx3fb_pan_display()
1199 virt_to_page(fbi->screen_base + offset), fbi->fix.smem_len, in mx3fb_pan_display()
1200 offset_in_page(fbi->screen_base + offset)); in mx3fb_pan_display()
1208 dev_err(fbi->device, in mx3fb_pan_display()
1222 dev_dbg(fbi->device, "%d: Submit %p #%d\n", __LINE__, txd, cookie); in mx3fb_pan_display()
1224 dev_err(fbi->device, in mx3fb_pan_display()
1233 fbi->var.xoffset = var->xoffset; in mx3fb_pan_display()
1234 fbi->var.yoffset = var->yoffset; in mx3fb_pan_display()
1237 fbi->var.vmode |= FB_VMODE_YWRAP; in mx3fb_pan_display()
1239 fbi->var.vmode &= ~FB_VMODE_YWRAP; in mx3fb_pan_display()
1241 mx3_fbi->cur_var = fbi->var; in mx3fb_pan_display()
1245 dev_dbg(fbi->device, "Update complete\n"); in mx3fb_pan_display()
1279 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend()
1282 fb_set_suspend(mx3fb->fbi, 1); in mx3fb_suspend()
1299 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume()
1307 fb_set_suspend(mx3fb->fbi, 0); in mx3fb_resume()
1333 static int mx3fb_map_video_memory(struct fb_info *fbi, unsigned int mem_len, in mx3fb_map_video_memory() argument
1339 fbi->screen_base = dma_alloc_writecombine(fbi->device, in mx3fb_map_video_memory()
1343 if (!fbi->screen_base) { in mx3fb_map_video_memory()
1344 dev_err(fbi->device, "Cannot allocate %u bytes framebuffer memory\n", in mx3fb_map_video_memory()
1351 mutex_lock(&fbi->mm_lock); in mx3fb_map_video_memory()
1352 fbi->fix.smem_start = addr; in mx3fb_map_video_memory()
1353 fbi->fix.smem_len = mem_len; in mx3fb_map_video_memory()
1355 mutex_unlock(&fbi->mm_lock); in mx3fb_map_video_memory()
1357 dev_dbg(fbi->device, "allocated fb @ p=0x%08x, v=0x%p, size=%d.\n", in mx3fb_map_video_memory()
1358 (uint32_t) fbi->fix.smem_start, fbi->screen_base, fbi->fix.smem_len); in mx3fb_map_video_memory()
1360 fbi->screen_size = fbi->fix.smem_len; in mx3fb_map_video_memory()
1363 memset((char *)fbi->screen_base, 0, fbi->fix.smem_len); in mx3fb_map_video_memory()
1368 fbi->fix.smem_len = 0; in mx3fb_map_video_memory()
1369 fbi->fix.smem_start = 0; in mx3fb_map_video_memory()
1370 fbi->screen_base = NULL; in mx3fb_map_video_memory()
1379 static int mx3fb_unmap_video_memory(struct fb_info *fbi) in mx3fb_unmap_video_memory() argument
1381 dma_free_writecombine(fbi->device, fbi->fix.smem_len, in mx3fb_unmap_video_memory()
1382 fbi->screen_base, fbi->fix.smem_start); in mx3fb_unmap_video_memory()
1384 fbi->screen_base = NULL; in mx3fb_unmap_video_memory()
1385 mutex_lock(&fbi->mm_lock); in mx3fb_unmap_video_memory()
1386 fbi->fix.smem_start = 0; in mx3fb_unmap_video_memory()
1387 fbi->fix.smem_len = 0; in mx3fb_unmap_video_memory()
1388 mutex_unlock(&fbi->mm_lock); in mx3fb_unmap_video_memory()
1398 struct fb_info *fbi; in mx3fb_init_fbinfo() local
1403 fbi = framebuffer_alloc(sizeof(struct mx3fb_info), dev); in mx3fb_init_fbinfo()
1404 if (!fbi) in mx3fb_init_fbinfo()
1407 mx3fbi = fbi->par; in mx3fb_init_fbinfo()
1411 fbi->var.activate = FB_ACTIVATE_NOW; in mx3fb_init_fbinfo()
1413 fbi->fbops = ops; in mx3fb_init_fbinfo()
1414 fbi->flags = FBINFO_FLAG_DEFAULT; in mx3fb_init_fbinfo()
1415 fbi->pseudo_palette = mx3fbi->pseudo_palette; in mx3fb_init_fbinfo()
1420 ret = fb_alloc_cmap(&fbi->cmap, 16, 0); in mx3fb_init_fbinfo()
1422 framebuffer_release(fbi); in mx3fb_init_fbinfo()
1426 return fbi; in mx3fb_init_fbinfo()
1435 struct fb_info *fbi; in init_fb_chan() local
1452 fbi = mx3fb_init_fbinfo(dev, &mx3fb_ops); in init_fb_chan()
1453 if (!fbi) in init_fb_chan()
1472 if (!fb_find_mode(&fbi->var, fbi, fb_mode, mode, in init_fb_chan()
1478 fb_videomode_to_modelist(mode, num_modes, &fbi->modelist); in init_fb_chan()
1481 fbi->var.yres_virtual = fbi->var.yres * 2; in init_fb_chan()
1483 mx3fb->fbi = fbi; in init_fb_chan()
1493 mx3fbi = fbi->par; in init_fb_chan()
1504 ret = __set_par(fbi, false); in init_fb_chan()
1508 __blank(FB_BLANK_UNBLANK, fbi); in init_fb_chan()
1512 ret = register_framebuffer(fbi); in init_fb_chan()
1521 fb_dealloc_cmap(&fbi->cmap); in init_fb_chan()
1522 framebuffer_release(fbi); in init_fb_chan()
1546 static void release_fbi(struct fb_info *fbi) in release_fbi() argument
1548 mx3fb_unmap_video_memory(fbi); in release_fbi()
1550 fb_dealloc_cmap(&fbi->cmap); in release_fbi()
1552 unregister_framebuffer(fbi); in release_fbi()
1553 framebuffer_release(fbi); in release_fbi()
1629 struct fb_info *fbi = mx3fb->fbi; in mx3fb_remove() local
1630 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_remove()
1634 release_fbi(fbi); in mx3fb_remove()