Lines Matching refs:fbi
237 struct fb_info *fbi; member
363 static void sdc_fb_init(struct mx3fb_info *fbi) in sdc_fb_init() argument
365 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_init()
374 static uint32_t sdc_fb_uninit(struct mx3fb_info *fbi) in sdc_fb_uninit() argument
376 struct mx3fb_data *mx3fb = fbi->mx3fb; in sdc_fb_uninit()
728 static int mx3fb_blank(int blank, struct fb_info *fbi);
729 static int mx3fb_map_video_memory(struct fb_info *fbi, unsigned int mem_len,
731 static int mx3fb_unmap_video_memory(struct fb_info *fbi);
738 static int mx3fb_set_fix(struct fb_info *fbi) in mx3fb_set_fix() argument
740 struct fb_fix_screeninfo *fix = &fbi->fix; in mx3fb_set_fix()
741 struct fb_var_screeninfo *var = &fbi->var; in mx3fb_set_fix()
762 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done()
772 static bool mx3fb_must_set_par(struct fb_info *fbi) in mx3fb_must_set_par() argument
774 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_must_set_par()
776 struct fb_var_screeninfo new_var = fbi->var; in mx3fb_must_set_par()
778 if ((fbi->var.activate & FB_ACTIVATE_FORCE) && in mx3fb_must_set_par()
779 (fbi->var.activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) in mx3fb_must_set_par()
792 static int __set_par(struct fb_info *fbi, bool lock) in __set_par() argument
797 struct mx3fb_info *mx3_fbi = fbi->par; in __set_par()
807 mx3fb_set_fix(fbi); in __set_par()
809 mem_len = fbi->var.yres_virtual * fbi->fix.line_length; in __set_par()
810 if (mem_len > fbi->fix.smem_len) { in __set_par()
811 if (fbi->fix.smem_start) in __set_par()
812 mx3fb_unmap_video_memory(fbi); in __set_par()
814 if (mx3fb_map_video_memory(fbi, mem_len, lock) < 0) in __set_par()
821 sg_dma_address(&sg[0]) = fbi->fix.smem_start; in __set_par()
822 sg_set_page(&sg[0], virt_to_page(fbi->screen_base), in __set_par()
823 fbi->fix.smem_len, in __set_par()
824 offset_in_page(fbi->screen_base)); in __set_par()
828 if (fbi->var.sync & FB_SYNC_HOR_HIGH_ACT) in __set_par()
830 if (fbi->var.sync & FB_SYNC_VERT_HIGH_ACT) in __set_par()
832 if (fbi->var.sync & FB_SYNC_CLK_INVERT) in __set_par()
834 if (fbi->var.sync & FB_SYNC_DATA_INVERT) in __set_par()
836 if (fbi->var.sync & FB_SYNC_OE_ACT_HIGH) in __set_par()
838 if (fbi->var.sync & FB_SYNC_CLK_IDLE_EN) in __set_par()
840 if (fbi->var.sync & FB_SYNC_CLK_SEL_EN) in __set_par()
842 if (fbi->var.sync & FB_SYNC_SHARP_MODE) in __set_par()
845 dev_dbg(fbi->device, "pixclock = %u Hz\n", in __set_par()
846 (u32) (PICOS2KHZ(fbi->var.pixclock) * 1000UL)); in __set_par()
849 (PICOS2KHZ(fbi->var.pixclock)) * 1000UL, in __set_par()
850 fbi->var.xres, fbi->var.yres, in __set_par()
851 fbi->var.left_margin, in __set_par()
852 fbi->var.hsync_len, in __set_par()
853 fbi->var.right_margin + in __set_par()
854 fbi->var.hsync_len, in __set_par()
855 fbi->var.upper_margin, in __set_par()
856 fbi->var.vsync_len, in __set_par()
857 fbi->var.lower_margin + in __set_par()
858 fbi->var.vsync_len, &sig_cfg) != 0) { in __set_par()
859 dev_err(fbi->device, in __set_par()
869 video->out_pixel_fmt = bpp_to_pixfmt(fbi->var.bits_per_pixel); in __set_par()
870 video->out_width = fbi->var.xres; in __set_par()
871 video->out_height = fbi->var.yres; in __set_par()
872 video->out_stride = fbi->var.xres_virtual; in __set_par()
890 mx3_fbi->cur_var = fbi->var; in __set_par()
902 static int mx3fb_set_par(struct fb_info *fbi) in mx3fb_set_par() argument
904 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_set_par()
913 ret = mx3fb_must_set_par(fbi) ? __set_par(fbi, true) : 0; in mx3fb_set_par()
925 static int mx3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *fbi) in mx3fb_check_var() argument
927 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_check_var()
931 dev_dbg(fbi->device, "%s\n", __func__); in mx3fb_check_var()
1003 dev_dbg(fbi->device, "pixclock set for 60Hz refresh = %u ps\n", in mx3fb_check_var()
1027 unsigned int trans, struct fb_info *fbi) in mx3fb_setcolreg() argument
1029 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_setcolreg()
1033 dev_dbg(fbi->device, "%s, regno = %u\n", __func__, regno); in mx3fb_setcolreg()
1040 if (fbi->var.grayscale) in mx3fb_setcolreg()
1043 switch (fbi->fix.visual) { in mx3fb_setcolreg()
1050 u32 *pal = fbi->pseudo_palette; in mx3fb_setcolreg()
1052 val = chan_to_field(red, &fbi->var.red); in mx3fb_setcolreg()
1053 val |= chan_to_field(green, &fbi->var.green); in mx3fb_setcolreg()
1054 val |= chan_to_field(blue, &fbi->var.blue); in mx3fb_setcolreg()
1071 static void __blank(int blank, struct fb_info *fbi) in __blank() argument
1073 struct mx3fb_info *mx3_fbi = fbi->par; in __blank()
1094 memset((char *)fbi->screen_base, 0, fbi->fix.smem_len); in __blank()
1109 static int mx3fb_blank(int blank, struct fb_info *fbi) in mx3fb_blank() argument
1111 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_blank()
1113 dev_dbg(fbi->device, "%s, blank = %d, base %p, len %u\n", __func__, in mx3fb_blank()
1114 blank, fbi->screen_base, fbi->fix.smem_len); in mx3fb_blank()
1120 __blank(blank, fbi); in mx3fb_blank()
1134 struct fb_info *fbi) in mx3fb_pan_display() argument
1136 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_pan_display()
1146 dev_dbg(fbi->device, "%s [%c]\n", __func__, in mx3fb_pan_display()
1150 dev_dbg(fbi->device, "x panning not supported\n"); in mx3fb_pan_display()
1161 y_bottom += fbi->var.yres; in mx3fb_pan_display()
1163 if (y_bottom > fbi->var.yres_virtual) in mx3fb_pan_display()
1168 offset = var->yoffset * fbi->fix.line_length in mx3fb_pan_display()
1169 + var->xoffset * (fbi->var.bits_per_pixel / 8); in mx3fb_pan_display()
1170 base = fbi->fix.smem_start + offset; in mx3fb_pan_display()
1172 dev_dbg(fbi->device, "Updating SDC BG buf %d address=0x%08lX\n", in mx3fb_pan_display()
1186 dev_info(fbi->device, "Panning failed due to %s\n", ret < 0 ? in mx3fb_pan_display()
1196 virt_to_page(fbi->screen_base + offset), fbi->fix.smem_len, in mx3fb_pan_display()
1197 offset_in_page(fbi->screen_base + offset)); in mx3fb_pan_display()
1205 dev_err(fbi->device, in mx3fb_pan_display()
1219 dev_dbg(fbi->device, "%d: Submit %p #%d\n", __LINE__, txd, cookie); in mx3fb_pan_display()
1221 dev_err(fbi->device, in mx3fb_pan_display()
1230 fbi->var.xoffset = var->xoffset; in mx3fb_pan_display()
1231 fbi->var.yoffset = var->yoffset; in mx3fb_pan_display()
1234 fbi->var.vmode |= FB_VMODE_YWRAP; in mx3fb_pan_display()
1236 fbi->var.vmode &= ~FB_VMODE_YWRAP; in mx3fb_pan_display()
1238 mx3_fbi->cur_var = fbi->var; in mx3fb_pan_display()
1242 dev_dbg(fbi->device, "Update complete\n"); in mx3fb_pan_display()
1276 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend()
1279 fb_set_suspend(mx3fb->fbi, 1); in mx3fb_suspend()
1296 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume()
1304 fb_set_suspend(mx3fb->fbi, 0); in mx3fb_resume()
1330 static int mx3fb_map_video_memory(struct fb_info *fbi, unsigned int mem_len, in mx3fb_map_video_memory() argument
1336 fbi->screen_base = dma_alloc_wc(fbi->device, mem_len, &addr, in mx3fb_map_video_memory()
1339 if (!fbi->screen_base) { in mx3fb_map_video_memory()
1340 dev_err(fbi->device, "Cannot allocate %u bytes framebuffer memory\n", in mx3fb_map_video_memory()
1347 mutex_lock(&fbi->mm_lock); in mx3fb_map_video_memory()
1348 fbi->fix.smem_start = addr; in mx3fb_map_video_memory()
1349 fbi->fix.smem_len = mem_len; in mx3fb_map_video_memory()
1351 mutex_unlock(&fbi->mm_lock); in mx3fb_map_video_memory()
1353 dev_dbg(fbi->device, "allocated fb @ p=0x%08x, v=0x%p, size=%d.\n", in mx3fb_map_video_memory()
1354 (uint32_t) fbi->fix.smem_start, fbi->screen_base, fbi->fix.smem_len); in mx3fb_map_video_memory()
1356 fbi->screen_size = fbi->fix.smem_len; in mx3fb_map_video_memory()
1359 memset((char *)fbi->screen_base, 0, fbi->fix.smem_len); in mx3fb_map_video_memory()
1364 fbi->fix.smem_len = 0; in mx3fb_map_video_memory()
1365 fbi->fix.smem_start = 0; in mx3fb_map_video_memory()
1366 fbi->screen_base = NULL; in mx3fb_map_video_memory()
1375 static int mx3fb_unmap_video_memory(struct fb_info *fbi) in mx3fb_unmap_video_memory() argument
1377 dma_free_wc(fbi->device, fbi->fix.smem_len, fbi->screen_base, in mx3fb_unmap_video_memory()
1378 fbi->fix.smem_start); in mx3fb_unmap_video_memory()
1380 fbi->screen_base = NULL; in mx3fb_unmap_video_memory()
1381 mutex_lock(&fbi->mm_lock); in mx3fb_unmap_video_memory()
1382 fbi->fix.smem_start = 0; in mx3fb_unmap_video_memory()
1383 fbi->fix.smem_len = 0; in mx3fb_unmap_video_memory()
1384 mutex_unlock(&fbi->mm_lock); in mx3fb_unmap_video_memory()
1395 struct fb_info *fbi; in mx3fb_init_fbinfo() local
1400 fbi = framebuffer_alloc(sizeof(struct mx3fb_info), dev); in mx3fb_init_fbinfo()
1401 if (!fbi) in mx3fb_init_fbinfo()
1404 mx3fbi = fbi->par; in mx3fb_init_fbinfo()
1408 fbi->var.activate = FB_ACTIVATE_NOW; in mx3fb_init_fbinfo()
1410 fbi->fbops = ops; in mx3fb_init_fbinfo()
1411 fbi->flags = FBINFO_FLAG_DEFAULT; in mx3fb_init_fbinfo()
1412 fbi->pseudo_palette = mx3fbi->pseudo_palette; in mx3fb_init_fbinfo()
1417 ret = fb_alloc_cmap(&fbi->cmap, 16, 0); in mx3fb_init_fbinfo()
1419 framebuffer_release(fbi); in mx3fb_init_fbinfo()
1423 return fbi; in mx3fb_init_fbinfo()
1432 struct fb_info *fbi; in init_fb_chan() local
1449 fbi = mx3fb_init_fbinfo(dev, &mx3fb_ops); in init_fb_chan()
1450 if (!fbi) in init_fb_chan()
1469 if (!fb_find_mode(&fbi->var, fbi, fb_mode, mode, in init_fb_chan()
1475 fb_videomode_to_modelist(mode, num_modes, &fbi->modelist); in init_fb_chan()
1478 fbi->var.yres_virtual = fbi->var.yres * 2; in init_fb_chan()
1480 mx3fb->fbi = fbi; in init_fb_chan()
1490 mx3fbi = fbi->par; in init_fb_chan()
1501 ret = __set_par(fbi, false); in init_fb_chan()
1505 __blank(FB_BLANK_UNBLANK, fbi); in init_fb_chan()
1509 ret = register_framebuffer(fbi); in init_fb_chan()
1518 fb_dealloc_cmap(&fbi->cmap); in init_fb_chan()
1519 framebuffer_release(fbi); in init_fb_chan()
1543 static void release_fbi(struct fb_info *fbi) in release_fbi() argument
1545 mx3fb_unmap_video_memory(fbi); in release_fbi()
1547 fb_dealloc_cmap(&fbi->cmap); in release_fbi()
1549 unregister_framebuffer(fbi); in release_fbi()
1550 framebuffer_release(fbi); in release_fbi()
1626 struct fb_info *fbi = mx3fb->fbi; in mx3fb_remove() local
1627 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_remove()
1631 release_fbi(fbi); in mx3fb_remove()