Lines Matching refs:fbi
174 struct fb_info *fbi; in sm501_alloc_mem() local
189 fbi = inf->fb[HEAD_CRT]; in sm501_alloc_mem()
198 if (fbi && ptr < smem_len) in sm501_alloc_mem()
209 fbi = inf->fb[HEAD_PANEL]; in sm501_alloc_mem()
210 if (fbi) { in sm501_alloc_mem()
211 par = fbi->par; in sm501_alloc_mem()
222 fbi = inf->fb[HEAD_CRT]; in sm501_alloc_mem()
223 ptr = fbi ? smem_len : 0; in sm501_alloc_mem()
225 fbi = inf->fb[HEAD_PANEL]; in sm501_alloc_mem()
226 if (fbi) { in sm501_alloc_mem()
227 par = fbi->par; in sm501_alloc_mem()
278 static void sm501fb_setup_gamma(struct sm501fb_info *fbi, in sm501fb_setup_gamma() argument
286 smc501_writel(value, fbi->regs + palette + offset); in sm501fb_setup_gamma()
433 struct sm501fb_info *fbi = par->info; in sm501fb_set_par_common() local
441 dev_dbg(fbi->dev, "%s: %dx%d, bpp = %d, virtual %dx%d\n", in sm501fb_set_par_common()
482 dev_dbg(fbi->dev, "%s: line length = %u\n", __func__, in sm501fb_set_par_common()
485 if (sm501_alloc_mem(fbi, &par->screen, mem_type, smem_len, smem_len)) { in sm501fb_set_par_common()
486 dev_err(fbi->dev, "no memory available\n"); in sm501fb_set_par_common()
491 info->fix.smem_start = fbi->fbmem_res->start + par->screen.sm_addr; in sm501fb_set_par_common()
495 info->screen_base = fbi->fbmem + par->screen.sm_addr; in sm501fb_set_par_common()
501 fbi->regs + head_addr); in sm501fb_set_par_common()
507 sm501pixclock = sm501_set_clock(fbi->dev->parent, clock_type, in sm501fb_set_par_common()
513 dev_dbg(fbi->dev, "%s: pixclock(ps) = %u, pixclock(Hz) = %lu, " in sm501fb_set_par_common()
530 struct sm501fb_info *fbi = par->info; in sm501fb_set_par_geometry() local
531 void __iomem *base = fbi->regs; in sm501fb_set_par_geometry()
544 smc501_writel(reg, fbi->regs + (par->head == HEAD_CRT ? in sm501fb_set_par_geometry()
584 struct sm501fb_info *fbi = par->info; in sm501fb_pan_crt() local
591 reg = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_pan_crt()
595 smc501_writel(reg, fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_pan_crt()
599 smc501_writel(reg | SM501_ADDR_FLIP, fbi->regs + SM501_DC_CRT_FB_ADDR); in sm501fb_pan_crt()
601 sm501fb_sync_regs(fbi); in sm501fb_pan_crt()
614 struct sm501fb_info *fbi = par->info; in sm501fb_pan_pnl() local
618 smc501_writel(reg, fbi->regs + SM501_DC_PANEL_FB_WIDTH); in sm501fb_pan_pnl()
621 smc501_writel(reg, fbi->regs + SM501_DC_PANEL_FB_HEIGHT); in sm501fb_pan_pnl()
623 sm501fb_sync_regs(fbi); in sm501fb_pan_pnl()
635 struct sm501fb_info *fbi = par->info; in sm501fb_set_par_crt() local
642 dev_dbg(fbi->dev, "%s(%p)\n", __func__, info); in sm501fb_set_par_crt()
645 sm501_misc_control(fbi->dev->parent, 0, SM501_MISC_DAC_POWER); in sm501fb_set_par_crt()
647 control = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_set_par_crt()
667 sm501_alloc_mem(fbi, &par->screen, SM501_MEMF_CRT, 0, in sm501fb_set_par_crt()
674 dev_err(fbi->dev, "failed to set common parameters\n"); in sm501fb_set_par_crt()
690 sm501fb_setup_gamma(fbi, SM501_DC_CRT_PALETTE); in sm501fb_set_par_crt()
695 sm501fb_setup_gamma(fbi, SM501_DC_CRT_PALETTE); in sm501fb_set_par_crt()
707 dev_dbg(fbi->dev, "new control is %08lx\n", control); in sm501fb_set_par_crt()
709 smc501_writel(control, fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_set_par_crt()
710 sm501fb_sync_regs(fbi); in sm501fb_set_par_crt()
715 static void sm501fb_panel_power(struct sm501fb_info *fbi, int to) in sm501fb_panel_power() argument
718 void __iomem *ctrl_reg = fbi->regs + SM501_DC_PANEL_CONTROL; in sm501fb_panel_power()
719 struct sm501_platdata_fbsub *pd = fbi->pdata->fb_pnl; in sm501fb_panel_power()
728 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
733 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
745 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
756 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
768 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
779 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
785 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
790 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
794 sm501fb_sync_regs(fbi); in sm501fb_panel_power()
805 struct sm501fb_info *fbi = par->info; in sm501fb_set_par_pnl() local
811 dev_dbg(fbi->dev, "%s(%p)\n", __func__, info); in sm501fb_set_par_pnl()
824 control = smc501_readl(fbi->regs + SM501_DC_PANEL_CONTROL); in sm501fb_set_par_pnl()
846 sm501fb_setup_gamma(fbi, SM501_DC_PANEL_PALETTE); in sm501fb_set_par_pnl()
851 sm501fb_setup_gamma(fbi, SM501_DC_PANEL_PALETTE); in sm501fb_set_par_pnl()
858 smc501_writel(0x0, fbi->regs + SM501_DC_PANEL_PANNING_CONTROL); in sm501fb_set_par_pnl()
862 smc501_writel(0x00, fbi->regs + SM501_DC_PANEL_TL_LOC); in sm501fb_set_par_pnl()
867 smc501_writel(reg, fbi->regs + SM501_DC_PANEL_BR_LOC); in sm501fb_set_par_pnl()
880 smc501_writel(control, fbi->regs + SM501_DC_PANEL_CONTROL); in sm501fb_set_par_pnl()
881 sm501fb_sync_regs(fbi); in sm501fb_set_par_pnl()
885 sm501_modify_reg(fbi->dev->parent, SM501_SYSTEM_CONTROL, in sm501fb_set_par_pnl()
889 sm501fb_panel_power(fbi, 1); in sm501fb_set_par_pnl()
919 struct sm501fb_info *fbi = par->info; in sm501fb_setcolreg() local
920 void __iomem *base = fbi->regs; in sm501fb_setcolreg()
969 struct sm501fb_info *fbi = par->info; in sm501fb_blank_pnl() local
971 dev_dbg(fbi->dev, "%s(mode=%d, %p)\n", __func__, blank_mode, info); in sm501fb_blank_pnl()
975 sm501fb_panel_power(fbi, 0); in sm501fb_blank_pnl()
979 sm501fb_panel_power(fbi, 1); in sm501fb_blank_pnl()
1000 struct sm501fb_info *fbi = par->info; in sm501fb_blank_crt() local
1003 dev_dbg(fbi->dev, "%s(mode=%d, %p)\n", __func__, blank_mode, info); in sm501fb_blank_crt()
1005 ctrl = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_blank_crt()
1010 sm501_misc_control(fbi->dev->parent, SM501_MISC_DAC_POWER, 0); in sm501fb_blank_crt()
1019 sm501_misc_control(fbi->dev->parent, 0, SM501_MISC_DAC_POWER); in sm501fb_blank_crt()
1029 smc501_writel(ctrl, fbi->regs + SM501_DC_CRT_CONTROL); in sm501fb_blank_crt()
1030 sm501fb_sync_regs(fbi); in sm501fb_blank_crt()
1043 struct sm501fb_info *fbi = par->info; in sm501fb_cursor() local
1044 void __iomem *base = fbi->regs; in sm501fb_cursor()
1048 dev_dbg(fbi->dev, "%s(%p,%p)\n", __func__, info, cursor); in sm501fb_cursor()
1083 dev_dbg(fbi->dev, "set position %d,%d\n", x, y); in sm501fb_cursor()
1094 dev_dbg(fbi->dev, "%s: update cmap (%08x,%08x)\n", in sm501fb_cursor()
1105 dev_dbg(fbi->dev, "fgcol %08lx, bgcol %08lx\n", fg, bg); in sm501fb_cursor()
1125 dev_dbg(fbi->dev, "%s: setting shape (%d,%d)\n", in sm501fb_cursor()
1153 sm501fb_sync_regs(fbi); /* ensure cursor data flushed */ in sm501fb_cursor()
1281 struct sm501fb_info *fbi = par->info; in sm501fb_sync() local
1285 (smc501_readl(fbi->regs + SM501_SYSTEM_CONTROL) & in sm501fb_sync()
1299 struct sm501fb_info *fbi = par->info; in sm501fb_copyarea() local
1340 smc501_writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE); in sm501fb_copyarea()
1342 fbi->regs2d + SM501_2D_DESTINATION_BASE); in sm501fb_copyarea()
1346 fbi->regs2d + SM501_2D_WINDOW_WIDTH); in sm501fb_copyarea()
1350 fbi->regs2d + SM501_2D_PITCH); in sm501fb_copyarea()
1355 smc501_writel(0, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_copyarea()
1358 smc501_writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_copyarea()
1361 smc501_writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_copyarea()
1366 smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK); in sm501fb_copyarea()
1369 smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_MASK); in sm501fb_copyarea()
1372 smc501_writel((sx << 16) | sy, fbi->regs2d + SM501_2D_SOURCE); in sm501fb_copyarea()
1373 smc501_writel((dx << 16) | dy, fbi->regs2d + SM501_2D_DESTINATION); in sm501fb_copyarea()
1376 smc501_writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION); in sm501fb_copyarea()
1379 smc501_writel(0x800000cc | rtl, fbi->regs2d + SM501_2D_CONTROL); in sm501fb_copyarea()
1385 struct sm501fb_info *fbi = par->info; in sm501fb_fillrect() local
1401 smc501_writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE); in sm501fb_fillrect()
1403 fbi->regs2d + SM501_2D_DESTINATION_BASE); in sm501fb_fillrect()
1407 fbi->regs2d + SM501_2D_WINDOW_WIDTH); in sm501fb_fillrect()
1411 fbi->regs2d + SM501_2D_PITCH); in sm501fb_fillrect()
1416 smc501_writel(0, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_fillrect()
1419 smc501_writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_fillrect()
1422 smc501_writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH); in sm501fb_fillrect()
1427 smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK); in sm501fb_fillrect()
1430 smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_MASK); in sm501fb_fillrect()
1433 smc501_writel(rect->color, fbi->regs2d + SM501_2D_FOREGROUND); in sm501fb_fillrect()
1437 fbi->regs2d + SM501_2D_DESTINATION); in sm501fb_fillrect()
1440 smc501_writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION); in sm501fb_fillrect()
1443 smc501_writel(0x800100cc, fbi->regs2d + SM501_2D_CONTROL); in sm501fb_fillrect()
1480 static int sm501_init_cursor(struct fb_info *fbi, unsigned int reg_base) in sm501_init_cursor() argument
1486 if (fbi == NULL) in sm501_init_cursor()
1489 par = fbi->par; in sm501_init_cursor()
1495 fbi->fix.smem_len); in sm501_init_cursor()
1858 struct fb_info *fbi; in sm501fb_probe_one() local
1868 fbi = framebuffer_alloc(sizeof(struct sm501fb_par), info->dev); in sm501fb_probe_one()
1869 if (fbi == NULL) { in sm501fb_probe_one()
1874 par = fbi->par; in sm501fb_probe_one()
1877 fbi->pseudo_palette = &par->pseudo_palette; in sm501fb_probe_one()
1879 info->fb[head] = fbi; in sm501fb_probe_one()
1889 struct fb_info *fbi = info->fb[head]; in sm501_free_init_fb() local
1891 fb_dealloc_cmap(&fbi->cmap); in sm501_free_init_fb()
1897 struct fb_info *fbi = info->fb[head]; in sm501fb_start_one() local
1900 if (!fbi) in sm501fb_start_one()
1918 dev_info(info->dev, "fb%d: %s frame buffer\n", fbi->node, fbi->fix.id); in sm501fb_start_one()
2095 struct fb_info *fbi = info->fb[head]; in sm501fb_suspend_fb() local
2096 struct sm501fb_par *par = fbi->par; in sm501fb_suspend_fb()
2102 (par->ops.fb_blank)(FB_BLANK_POWERDOWN, fbi); in sm501fb_suspend_fb()
2107 fb_set_suspend(fbi, 1); in sm501fb_suspend_fb()
2142 struct fb_info *fbi = info->fb[head]; in sm501fb_resume_fb() local
2143 struct sm501fb_par *par = fbi->par; in sm501fb_resume_fb()
2150 (par->ops.fb_set_par)(fbi); in sm501fb_resume_fb()
2166 fb_set_suspend(fbi, 0); in sm501fb_resume_fb()