Lines Matching refs:info
366 void (*unmap)(struct fb_info *info);
377 struct fb_info *info);
380 static void init_vgachip(struct fb_info *info);
411 static void cirrusfb_dbg_reg_dump(struct fb_info *info, caddr_t regbase);
412 static void cirrusfb_dbg_print_regs(struct fb_info *info,
429 static int cirrusfb_open(struct fb_info *info, int user) in cirrusfb_open() argument
432 switch_monitor(info->par, 1); in cirrusfb_open()
437 static int cirrusfb_release(struct fb_info *info, int user) in cirrusfb_release() argument
440 switch_monitor(info->par, 0); in cirrusfb_release()
449 static int cirrusfb_check_mclk(struct fb_info *info, long freq) in cirrusfb_check_mclk() argument
451 struct cirrusfb_info *cinfo = info->par; in cirrusfb_check_mclk()
456 dev_dbg(info->device, "Read MCLK of %ld kHz\n", mclk); in cirrusfb_check_mclk()
463 dev_dbg(info->device, "Using VCLK = MCLK\n"); in cirrusfb_check_mclk()
466 dev_dbg(info->device, "Using VCLK = MCLK/2\n"); in cirrusfb_check_mclk()
474 struct fb_info *info) in cirrusfb_check_pixclock() argument
478 struct cirrusfb_info *cinfo = info->par; in cirrusfb_check_pixclock()
484 dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq); in cirrusfb_check_pixclock()
492 dev_err(info->device, in cirrusfb_check_pixclock()
522 if (cinfo->btype == BT_SD64 && info->fix.smem_len <= MB_ && in cirrusfb_check_pixclock()
531 struct fb_info *info) in cirrusfb_check_var() argument
535 unsigned pixels = info->screen_size * 8 / var->bits_per_pixel; in cirrusfb_check_var()
536 struct cirrusfb_info *cinfo = info->par; in cirrusfb_check_var()
572 dev_dbg(info->device, in cirrusfb_check_var()
583 dev_info(info->device, in cirrusfb_check_var()
591 dev_err(info->device, "mode %dx%dx%d rejected... " in cirrusfb_check_var()
618 dev_err(info->device, "ERROR: VerticalTotal >= 1280; " in cirrusfb_check_var()
623 if (cirrusfb_check_pixclock(var, info)) in cirrusfb_check_var()
632 static void cirrusfb_set_mclk_as_source(const struct fb_info *info, int div) in cirrusfb_set_mclk_as_source() argument
634 struct cirrusfb_info *cinfo = info->par; in cirrusfb_set_mclk_as_source()
641 dev_dbg(info->device, "Set %s as pixclock source.\n", in cirrusfb_set_mclk_as_source()
658 static int cirrusfb_set_par_foo(struct fb_info *info) in cirrusfb_set_par_foo() argument
660 struct cirrusfb_info *cinfo = info->par; in cirrusfb_set_par_foo()
661 struct fb_var_screeninfo *var = &info->var; in cirrusfb_set_par_foo()
672 dev_dbg(info->device, "Requested mode: %dx%dx%d\n", in cirrusfb_set_par_foo()
677 info->fix.line_length = var->xres_virtual / 8; in cirrusfb_set_par_foo()
678 info->fix.visual = FB_VISUAL_MONO10; in cirrusfb_set_par_foo()
682 info->fix.line_length = var->xres_virtual; in cirrusfb_set_par_foo()
683 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in cirrusfb_set_par_foo()
688 info->fix.line_length = var->xres_virtual * in cirrusfb_set_par_foo()
690 info->fix.visual = FB_VISUAL_TRUECOLOR; in cirrusfb_set_par_foo()
693 info->fix.type = FB_TYPE_PACKED_PIXELS; in cirrusfb_set_par_foo()
695 init_vgachip(info); in cirrusfb_set_par_foo()
751 dev_dbg(info->device, "CRT0: %d\n", htotal); in cirrusfb_set_par_foo()
754 dev_dbg(info->device, "CRT1: %d\n", hdispend); in cirrusfb_set_par_foo()
757 dev_dbg(info->device, "CRT2: %d\n", var->xres / 8); in cirrusfb_set_par_foo()
761 dev_dbg(info->device, "CRT3: 128+%d\n", (htotal + 5) % 32); in cirrusfb_set_par_foo()
765 dev_dbg(info->device, "CRT4: %d\n", hsyncstart); in cirrusfb_set_par_foo()
771 dev_dbg(info->device, "CRT5: %d\n", tmp); in cirrusfb_set_par_foo()
774 dev_dbg(info->device, "CRT6: %d\n", vtotal & 0xff); in cirrusfb_set_par_foo()
792 dev_dbg(info->device, "CRT7: %d\n", tmp); in cirrusfb_set_par_foo()
800 dev_dbg(info->device, "CRT9: %d\n", tmp); in cirrusfb_set_par_foo()
803 dev_dbg(info->device, "CRT10: %d\n", vsyncstart & 0xff); in cirrusfb_set_par_foo()
806 dev_dbg(info->device, "CRT11: 64+32+%d\n", vsyncend % 16); in cirrusfb_set_par_foo()
809 dev_dbg(info->device, "CRT12: %d\n", vdispend & 0xff); in cirrusfb_set_par_foo()
812 dev_dbg(info->device, "CRT15: %d\n", (vdispend + 1) & 0xff); in cirrusfb_set_par_foo()
815 dev_dbg(info->device, "CRT16: %d\n", vtotal & 0xff); in cirrusfb_set_par_foo()
818 dev_dbg(info->device, "CRT18: 0xff\n"); in cirrusfb_set_par_foo()
833 dev_dbg(info->device, "CRT1a: %d\n", tmp); in cirrusfb_set_par_foo()
847 dev_dbg(info->device, "VCLK freq: %ld kHz nom: %d den: %d div: %d\n", in cirrusfb_set_par_foo()
860 int divMCLK = cirrusfb_check_mclk(info, freq); in cirrusfb_set_par_foo()
863 cirrusfb_set_mclk_as_source(info, divMCLK); in cirrusfb_set_par_foo()
941 dev_dbg(info->device, "preparing for 1 bit deep display\n"); in cirrusfb_set_par_foo()
965 dev_warn(info->device, "unknown Board\n"); in cirrusfb_set_par_foo()
993 dev_warn(info->device, "unknown Board\n"); in cirrusfb_set_par_foo()
1018 dev_dbg(info->device, "preparing for 8 bit deep display\n"); in cirrusfb_set_par_foo()
1040 dev_warn(info->device, "unknown Board\n"); in cirrusfb_set_par_foo()
1066 dev_warn(info->device, "unknown board\n"); in cirrusfb_set_par_foo()
1087 dev_dbg(info->device, "preparing for 16 bit deep display\n"); in cirrusfb_set_par_foo()
1125 dev_warn(info->device, "unknown Board\n"); in cirrusfb_set_par_foo()
1146 dev_dbg(info->device, "preparing for 24 bit deep display\n"); in cirrusfb_set_par_foo()
1183 dev_warn(info->device, "unknown Board\n"); in cirrusfb_set_par_foo()
1200 dev_err(info->device, in cirrusfb_set_par_foo()
1204 pitch = info->fix.line_length >> 3; in cirrusfb_set_par_foo()
1233 dev_dbg(info->device, "CRT1e: %d\n", tmp); in cirrusfb_set_par_foo()
1259 dev_dbg(info->device, "CL_SEQR1: %d\n", tmp); in cirrusfb_set_par_foo()
1262 cirrusfb_dbg_reg_dump(info, NULL); in cirrusfb_set_par_foo()
1270 static int cirrusfb_set_par(struct fb_info *info) in cirrusfb_set_par() argument
1272 cirrusfb_set_par_foo(info); in cirrusfb_set_par()
1273 return cirrusfb_set_par_foo(info); in cirrusfb_set_par()
1278 struct fb_info *info) in cirrusfb_setcolreg() argument
1280 struct cirrusfb_info *cinfo = info->par; in cirrusfb_setcolreg()
1285 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { in cirrusfb_setcolreg()
1287 red >>= (16 - info->var.red.length); in cirrusfb_setcolreg()
1288 green >>= (16 - info->var.green.length); in cirrusfb_setcolreg()
1289 blue >>= (16 - info->var.blue.length); in cirrusfb_setcolreg()
1293 v = (red << info->var.red.offset) | in cirrusfb_setcolreg()
1294 (green << info->var.green.offset) | in cirrusfb_setcolreg()
1295 (blue << info->var.blue.offset); in cirrusfb_setcolreg()
1301 if (info->var.bits_per_pixel == 8) in cirrusfb_setcolreg()
1314 struct fb_info *info) in cirrusfb_pan_display() argument
1319 struct cirrusfb_info *cinfo = info->par; in cirrusfb_pan_display()
1326 xoffset = var->xoffset * info->var.bits_per_pixel / 8; in cirrusfb_pan_display()
1328 base = var->yoffset * info->fix.line_length + xoffset; in cirrusfb_pan_display()
1330 if (info->var.bits_per_pixel == 1) { in cirrusfb_pan_display()
1371 if (info->var.bits_per_pixel == 1) in cirrusfb_pan_display()
1377 static int cirrusfb_blank(int blank_mode, struct fb_info *info) in cirrusfb_blank() argument
1391 struct cirrusfb_info *cinfo = info->par; in cirrusfb_blank()
1394 dev_dbg(info->device, "ENTER, blank mode = %d\n", blank_mode); in cirrusfb_blank()
1396 if (info->state != FBINFO_STATE_RUNNING || in cirrusfb_blank()
1398 dev_dbg(info->device, "EXIT, returning 0\n"); in cirrusfb_blank()
1429 dev_dbg(info->device, "EXIT, returning 1\n"); in cirrusfb_blank()
1436 dev_dbg(info->device, "EXIT, returning 0\n"); in cirrusfb_blank()
1446 static void init_vgachip(struct fb_info *info) in init_vgachip() argument
1448 struct cirrusfb_info *cinfo = info->par; in init_vgachip()
1494 dev_err(info->device, "Warning: Unknown board type\n"); in init_vgachip()
1499 assert(info->screen_size > 0); in init_vgachip()
1717 static int cirrusfb_sync(struct fb_info *info) in cirrusfb_sync() argument
1719 struct cirrusfb_info *cinfo = info->par; in cirrusfb_sync()
1728 static void cirrusfb_fillrect(struct fb_info *info, in cirrusfb_fillrect() argument
1733 struct cirrusfb_info *cinfo = info->par; in cirrusfb_fillrect()
1734 int m = info->var.bits_per_pixel; in cirrusfb_fillrect()
1735 u32 color = (info->fix.visual == FB_VISUAL_TRUECOLOR) ? in cirrusfb_fillrect()
1738 if (info->state != FBINFO_STATE_RUNNING) in cirrusfb_fillrect()
1740 if (info->flags & FBINFO_HWACCEL_DISABLED) { in cirrusfb_fillrect()
1741 cfb_fillrect(info, region); in cirrusfb_fillrect()
1745 vxres = info->var.xres_virtual; in cirrusfb_fillrect()
1746 vyres = info->var.yres_virtual; in cirrusfb_fillrect()
1760 info->var.bits_per_pixel, in cirrusfb_fillrect()
1764 info->fix.line_length, 0x40); in cirrusfb_fillrect()
1767 static void cirrusfb_copyarea(struct fb_info *info, in cirrusfb_copyarea() argument
1772 struct cirrusfb_info *cinfo = info->par; in cirrusfb_copyarea()
1773 int m = info->var.bits_per_pixel; in cirrusfb_copyarea()
1775 if (info->state != FBINFO_STATE_RUNNING) in cirrusfb_copyarea()
1777 if (info->flags & FBINFO_HWACCEL_DISABLED) { in cirrusfb_copyarea()
1778 cfb_copyarea(info, area); in cirrusfb_copyarea()
1782 vxres = info->var.xres_virtual; in cirrusfb_copyarea()
1783 vyres = info->var.yres_virtual; in cirrusfb_copyarea()
1800 cirrusfb_BitBLT(cinfo->regbase, info->var.bits_per_pixel, in cirrusfb_copyarea()
1804 info->fix.line_length); in cirrusfb_copyarea()
1808 static void cirrusfb_imageblit(struct fb_info *info, in cirrusfb_imageblit() argument
1811 struct cirrusfb_info *cinfo = info->par; in cirrusfb_imageblit()
1812 unsigned char op = (info->var.bits_per_pixel == 24) ? 0xc : 0x4; in cirrusfb_imageblit()
1814 if (info->state != FBINFO_STATE_RUNNING) in cirrusfb_imageblit()
1817 if (info->flags & FBINFO_HWACCEL_DISABLED || image->depth != 1) in cirrusfb_imageblit()
1818 cfb_imageblit(info, image); in cirrusfb_imageblit()
1821 cfb_imageblit(info, image); in cirrusfb_imageblit()
1824 int m = info->var.bits_per_pixel; in cirrusfb_imageblit()
1827 if (info->var.bits_per_pixel == 8) { in cirrusfb_imageblit()
1831 fg = ((u32 *)(info->pseudo_palette))[image->fg_color]; in cirrusfb_imageblit()
1832 bg = ((u32 *)(info->pseudo_palette))[image->bg_color]; in cirrusfb_imageblit()
1834 if (info->var.bits_per_pixel == 24) { in cirrusfb_imageblit()
1837 info->var.bits_per_pixel, in cirrusfb_imageblit()
1842 info->fix.line_length, 0x40); in cirrusfb_imageblit()
1845 info->var.bits_per_pixel, in cirrusfb_imageblit()
1849 info->fix.line_length, op); in cirrusfb_imageblit()
1850 memcpy(info->screen_base, image->data, size); in cirrusfb_imageblit()
1861 static unsigned int cirrusfb_get_memsize(struct fb_info *info, in cirrusfb_get_memsize() argument
1865 struct cirrusfb_info *cinfo = info->par; in cirrusfb_get_memsize()
1887 dev_warn(info->device, "Unknown memory size!\n"); in cirrusfb_get_memsize()
1924 static void cirrusfb_pci_unmap(struct fb_info *info) in cirrusfb_pci_unmap() argument
1926 struct pci_dev *pdev = to_pci_dev(info->device); in cirrusfb_pci_unmap()
1927 struct cirrusfb_info *cinfo = info->par; in cirrusfb_pci_unmap()
1931 iounmap(info->screen_base); in cirrusfb_pci_unmap()
1942 static void cirrusfb_zorro_unmap(struct fb_info *info) in cirrusfb_zorro_unmap() argument
1944 struct cirrusfb_info *cinfo = info->par; in cirrusfb_zorro_unmap()
1945 struct zorro_dev *zdev = to_zorro_dev(info->device); in cirrusfb_zorro_unmap()
1947 if (info->fix.smem_start > 16 * MB_) in cirrusfb_zorro_unmap()
1948 iounmap(info->screen_base); in cirrusfb_zorro_unmap()
1949 if (info->fix.mmio_start > 16 * MB_) in cirrusfb_zorro_unmap()
1972 static int cirrusfb_set_fbinfo(struct fb_info *info) in cirrusfb_set_fbinfo() argument
1974 struct cirrusfb_info *cinfo = info->par; in cirrusfb_set_fbinfo()
1975 struct fb_var_screeninfo *var = &info->var; in cirrusfb_set_fbinfo()
1977 info->pseudo_palette = cinfo->pseudo_palette; in cirrusfb_set_fbinfo()
1978 info->flags = FBINFO_DEFAULT in cirrusfb_set_fbinfo()
1985 info->flags |= FBINFO_HWACCEL_DISABLED; in cirrusfb_set_fbinfo()
1986 info->fix.accel = FB_ACCEL_NONE; in cirrusfb_set_fbinfo()
1988 info->fix.accel = FB_ACCEL_CIRRUS_ALPINE; in cirrusfb_set_fbinfo()
1990 info->fbops = &cirrusfb_ops; in cirrusfb_set_fbinfo()
1994 info->screen_base += 1 * MB_; in cirrusfb_set_fbinfo()
1996 info->screen_base += 2 * MB_; in cirrusfb_set_fbinfo()
2000 strlcpy(info->fix.id, cirrusfb_board_info[cinfo->btype].name, in cirrusfb_set_fbinfo()
2001 sizeof(info->fix.id)); in cirrusfb_set_fbinfo()
2005 info->fix.smem_len = info->screen_size; in cirrusfb_set_fbinfo()
2007 info->fix.smem_len /= 4; in cirrusfb_set_fbinfo()
2008 info->fix.type_aux = 0; in cirrusfb_set_fbinfo()
2009 info->fix.xpanstep = 1; in cirrusfb_set_fbinfo()
2010 info->fix.ypanstep = 1; in cirrusfb_set_fbinfo()
2011 info->fix.ywrapstep = 0; in cirrusfb_set_fbinfo()
2014 info->fix.mmio_len = 0; in cirrusfb_set_fbinfo()
2016 fb_alloc_cmap(&info->cmap, 256, 0); in cirrusfb_set_fbinfo()
2021 static int cirrusfb_register(struct fb_info *info) in cirrusfb_register() argument
2023 struct cirrusfb_info *cinfo = info->par; in cirrusfb_register()
2030 cirrusfb_set_fbinfo(info); in cirrusfb_register()
2032 dev_dbg(info->device, "(RAM start set to: 0x%p)\n", info->screen_base); in cirrusfb_register()
2034 err = fb_find_mode(&info->var, info, mode_option, NULL, 0, NULL, 8); in cirrusfb_register()
2036 dev_dbg(info->device, "wrong initial video mode\n"); in cirrusfb_register()
2041 info->var.activate = FB_ACTIVATE_NOW; in cirrusfb_register()
2043 err = cirrusfb_check_var(&info->var, info); in cirrusfb_register()
2046 dev_dbg(info->device, in cirrusfb_register()
2051 err = register_framebuffer(info); in cirrusfb_register()
2053 dev_err(info->device, in cirrusfb_register()
2061 fb_dealloc_cmap(&info->cmap); in cirrusfb_register()
2065 static void cirrusfb_cleanup(struct fb_info *info) in cirrusfb_cleanup() argument
2067 struct cirrusfb_info *cinfo = info->par; in cirrusfb_cleanup()
2070 unregister_framebuffer(info); in cirrusfb_cleanup()
2071 fb_dealloc_cmap(&info->cmap); in cirrusfb_cleanup()
2072 dev_dbg(info->device, "Framebuffer unregistered\n"); in cirrusfb_cleanup()
2073 cinfo->unmap(info); in cirrusfb_cleanup()
2074 framebuffer_release(info); in cirrusfb_cleanup()
2082 struct fb_info *info; in cirrusfb_pci_register() local
2092 info = framebuffer_alloc(sizeof(struct cirrusfb_info), &pdev->dev); in cirrusfb_pci_register()
2093 if (!info) { in cirrusfb_pci_register()
2099 cinfo = info->par; in cirrusfb_pci_register()
2102 dev_dbg(info->device, in cirrusfb_pci_register()
2105 dev_dbg(info->device, " base address 1 is 0x%Lx\n", in cirrusfb_pci_register()
2108 dev_dbg(info->device, in cirrusfb_pci_register()
2110 get_pci_addrs(pdev, &board_addr, &info->fix.mmio_start); in cirrusfb_pci_register()
2113 cinfo->laguna_mmio = ioremap(info->fix.mmio_start, 0x1000); in cirrusfb_pci_register()
2115 dev_dbg(info->device, "Board address: 0x%lx, register address: 0x%lx\n", in cirrusfb_pci_register()
2116 board_addr, info->fix.mmio_start); in cirrusfb_pci_register()
2119 32 * MB_ : cirrusfb_get_memsize(info, cinfo->regbase); in cirrusfb_pci_register()
2123 dev_err(info->device, "cannot reserve region 0x%lx, abort\n", in cirrusfb_pci_register()
2129 dev_err(info->device, "cannot reserve region 0x%lx, abort\n", in cirrusfb_pci_register()
2138 info->screen_base = ioremap(board_addr, board_size); in cirrusfb_pci_register()
2139 if (!info->screen_base) { in cirrusfb_pci_register()
2144 info->fix.smem_start = board_addr; in cirrusfb_pci_register()
2145 info->screen_size = board_size; in cirrusfb_pci_register()
2148 dev_info(info->device, in cirrusfb_pci_register()
2150 info->screen_size >> 10, board_addr); in cirrusfb_pci_register()
2151 pci_set_drvdata(pdev, info); in cirrusfb_pci_register()
2153 ret = cirrusfb_register(info); in cirrusfb_pci_register()
2157 iounmap(info->screen_base); in cirrusfb_pci_register()
2169 framebuffer_release(info); in cirrusfb_pci_register()
2176 struct fb_info *info = pci_get_drvdata(pdev); in cirrusfb_pci_unregister() local
2178 cirrusfb_cleanup(info); in cirrusfb_pci_unregister()
2199 struct fb_info *info; in cirrusfb_zorro_register() local
2206 info = framebuffer_alloc(sizeof(struct cirrusfb_info), &z->dev); in cirrusfb_zorro_register()
2207 if (!info) { in cirrusfb_zorro_register()
2225 dev_err(info->device, "No video RAM found\n"); in cirrusfb_zorro_register()
2234 dev_warn(info->device, in cirrusfb_zorro_register()
2243 dev_info(info->device, in cirrusfb_zorro_register()
2249 dev_err(info->device, "Cannot reserve %pR\n", &z->resource); in cirrusfb_zorro_register()
2254 cinfo = info->par; in cirrusfb_zorro_register()
2257 info->fix.mmio_start = regbase; in cirrusfb_zorro_register()
2261 dev_err(info->device, "Cannot map registers\n"); in cirrusfb_zorro_register()
2266 info->fix.smem_start = rambase; in cirrusfb_zorro_register()
2267 info->screen_size = ramsize; in cirrusfb_zorro_register()
2268 info->screen_base = rambase > 16 * MB_ ? ioremap(rambase, ramsize) in cirrusfb_zorro_register()
2270 if (!info->screen_base) { in cirrusfb_zorro_register()
2271 dev_err(info->device, "Cannot map video RAM\n"); in cirrusfb_zorro_register()
2278 dev_info(info->device, in cirrusfb_zorro_register()
2287 error = cirrusfb_register(info); in cirrusfb_zorro_register()
2289 dev_err(info->device, "Failed to register device, error %d\n", in cirrusfb_zorro_register()
2294 zorro_set_drvdata(z, info); in cirrusfb_zorro_register()
2299 iounmap(info->screen_base); in cirrusfb_zorro_register()
2307 framebuffer_release(info); in cirrusfb_zorro_register()
2313 struct fb_info *info = zorro_get_drvdata(z); in cirrusfb_zorro_unregister() local
2315 cirrusfb_cleanup(info); in cirrusfb_zorro_unregister()
2815 static void cirrusfb_dbg_print_regs(struct fb_info *info, in cirrusfb_dbg_print_regs() argument
2843 dev_dbg(info->device, "%8s = 0x%02X\n", name, val); in cirrusfb_dbg_print_regs()
2861 static void cirrusfb_dbg_reg_dump(struct fb_info *info, caddr_t regbase) in cirrusfb_dbg_reg_dump() argument
2863 dev_dbg(info->device, "VGA CRTC register dump:\n"); in cirrusfb_dbg_reg_dump()
2865 cirrusfb_dbg_print_regs(info, regbase, CRT, in cirrusfb_dbg_reg_dump()
2915 dev_dbg(info->device, "\n"); in cirrusfb_dbg_reg_dump()
2917 dev_dbg(info->device, "VGA SEQ register dump:\n"); in cirrusfb_dbg_reg_dump()
2919 cirrusfb_dbg_print_regs(info, regbase, SEQ, in cirrusfb_dbg_reg_dump()
2948 dev_dbg(info->device, "\n"); in cirrusfb_dbg_reg_dump()