• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/video/

Lines Matching defs:cfb

100 #define cyber2000fb_writel(val, reg, cfb)	writel(val, (cfb)->regs + (reg))
101 #define cyber2000fb_writew(val, reg, cfb) writew(val, (cfb)->regs + (reg))
102 #define cyber2000fb_writeb(val, reg, cfb) writeb(val, (cfb)->regs + (reg))
104 #define cyber2000fb_readb(reg, cfb) readb((cfb)->regs + (reg))
107 cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb)
109 cyber2000fb_writew((reg & 255) | val << 8, 0x3d4, cfb);
113 cyber2000_grphw(unsigned int reg, unsigned int val, struct cfb_info *cfb)
115 cyber2000fb_writew((reg & 255) | val << 8, 0x3ce, cfb);
119 cyber2000_grphr(unsigned int reg, struct cfb_info *cfb)
121 cyber2000fb_writeb(reg, 0x3ce, cfb);
122 return cyber2000fb_readb(0x3cf, cfb);
126 cyber2000_attrw(unsigned int reg, unsigned int val, struct cfb_info *cfb)
128 cyber2000fb_readb(0x3da, cfb);
129 cyber2000fb_writeb(reg, 0x3c0, cfb);
130 cyber2000fb_readb(0x3c1, cfb);
131 cyber2000fb_writeb(val, 0x3c0, cfb);
135 cyber2000_seqw(unsigned int reg, unsigned int val, struct cfb_info *cfb)
137 cyber2000fb_writew((reg & 255) | val << 8, 0x3c4, cfb);
148 struct cfb_info *cfb = (struct cfb_info *)info;
151 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) {
156 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb);
157 cyber2000fb_writew(rect->width - 1, CO_REG_PIXWIDTH, cfb);
158 cyber2000fb_writew(rect->height - 1, CO_REG_PIXHEIGHT, cfb);
161 if (cfb->fb.var.bits_per_pixel > 8)
162 col = ((u32 *)cfb->fb.pseudo_palette)[col];
163 cyber2000fb_writel(col, CO_REG_FGCOLOUR, cfb);
165 dst = rect->dx + rect->dy * cfb->fb.var.xres_virtual;
166 if (cfb->fb.var.bits_per_pixel == 24) {
167 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb);
171 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb);
172 cyber2000fb_writeb(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb);
173 cyber2000fb_writew(CO_CMD_L_PATTERN_FGCOL, CO_REG_CMD_L, cfb);
174 cyber2000fb_writew(CO_CMD_H_BLITTER, CO_REG_CMD_H, cfb);
180 struct cfb_info *cfb = (struct cfb_info *)info;
184 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) {
189 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb);
190 cyber2000fb_writew(region->width - 1, CO_REG_PIXWIDTH, cfb);
191 cyber2000fb_writew(region->height - 1, CO_REG_PIXHEIGHT, cfb);
193 src = region->sx + region->sy * cfb->fb.var.xres_virtual;
194 dst = region->dx + region->dy * cfb->fb.var.xres_virtual;
203 src += (region->height - 1) * cfb->fb.var.xres_virtual;
204 dst += (region->height - 1) * cfb->fb.var.xres_virtual;
208 if (cfb->fb.var.bits_per_pixel == 24) {
209 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb);
213 cyber2000fb_writel(src, CO_REG_SRC1_PTR, cfb);
214 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb);
215 cyber2000fb_writew(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb);
216 cyber2000fb_writew(cmd, CO_REG_CMD_L, cfb);
218 CO_REG_CMD_H, cfb);
230 struct cfb_info *cfb = (struct cfb_info *)info;
233 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT))
236 while (cyber2000fb_readb(CO_REG_CONTROL, cfb) & CO_CTRL_BUSY) {
239 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb);
265 struct cfb_info *cfb = (struct cfb_info *)info;
266 struct fb_var_screeninfo *var = &cfb->fb.var;
270 switch (cfb->fb.fix.visual) {
291 cfb->palette[regno].red = red;
292 cfb->palette[regno].green = green;
293 cfb->palette[regno].blue = blue;
295 cyber2000fb_writeb(regno, 0x3c8, cfb);
296 cyber2000fb_writeb(red, 0x3c9, cfb);
297 cyber2000fb_writeb(green, 0x3c9, cfb);
298 cyber2000fb_writeb(blue, 0x3c9, cfb);
317 cfb->palette[regno << 2].green = green;
323 cyber2000fb_writeb(regno << 2, 0x3c8, cfb);
324 cyber2000fb_writeb(cfb->palette[regno >> 1].red,
325 0x3c9, cfb);
326 cyber2000fb_writeb(green, 0x3c9, cfb);
327 cyber2000fb_writeb(cfb->palette[regno >> 1].blue,
328 0x3c9, cfb);
330 green = cfb->palette[regno << 3].green;
336 cfb->palette[regno << 3].red = red;
337 cfb->palette[regno << 3].green = green;
338 cfb->palette[regno << 3].blue = blue;
344 cyber2000fb_writeb(regno << 3, 0x3c8, cfb);
345 cyber2000fb_writeb(red, 0x3c9, cfb);
346 cyber2000fb_writeb(green, 0x3c9, cfb);
347 cyber2000fb_writeb(blue, 0x3c9, cfb);
352 cfb->palette[regno << 4].red = red;
353 cfb->palette[regno << 4].green = green;
354 cfb->palette[regno << 4].blue = blue;
360 cyber2000fb_writeb(regno << 4, 0x3c8, cfb);
361 cyber2000fb_writeb(red, 0x3c9, cfb);
362 cyber2000fb_writeb(green, 0x3c9, cfb);
363 cyber2000fb_writeb(blue, 0x3c9, cfb);
399 ((u32 *)cfb->fb.pseudo_palette)[regno] = pseudo_val;
430 static void cyber2000fb_write_ramdac_ctrl(struct cfb_info *cfb)
433 unsigned int val = cfb->ramdac_ctrl | cfb->ramdac_powerdown;
435 cyber2000fb_writeb(0x56, 0x3ce, cfb);
436 i = cyber2000fb_readb(0x3cf, cfb);
437 cyber2000fb_writeb(i | 4, 0x3cf, cfb);
438 cyber2000fb_writeb(val, 0x3c6, cfb);
439 cyber2000fb_writeb(i, 0x3cf, cfb);
441 cyber2000fb_readb(0x3cf, cfb);
444 static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw)
452 cyber2000fb_writeb(i, 0x3c8, cfb);
453 cyber2000fb_writeb(0, 0x3c9, cfb);
454 cyber2000fb_writeb(0, 0x3c9, cfb);
455 cyber2000fb_writeb(0, 0x3c9, cfb);
458 cyber2000fb_writeb(0xef, 0x3c2, cfb);
459 cyber2000_crtcw(0x11, 0x0b, cfb);
460 cyber2000_attrw(0x11, 0x00, cfb);
462 cyber2000_seqw(0x00, 0x01, cfb);
463 cyber2000_seqw(0x01, 0x01, cfb);
464 cyber2000_seqw(0x02, 0x0f, cfb);
465 cyber2000_seqw(0x03, 0x00, cfb);
466 cyber2000_seqw(0x04, 0x0e, cfb);
467 cyber2000_seqw(0x00, 0x03, cfb);
470 cyber2000_crtcw(crtc_idx[i], hw->crtc[i], cfb);
473 cyber2000_crtcw(i, 0, cfb);
475 cyber2000_grphw(EXT_CRT_VRTOFL, hw->crtc_ofl, cfb);
476 cyber2000_grphw(0x00, 0x00, cfb);
477 cyber2000_grphw(0x01, 0x00, cfb);
478 cyber2000_grphw(0x02, 0x00, cfb);
479 cyber2000_grphw(0x03, 0x00, cfb);
480 cyber2000_grphw(0x04, 0x00, cfb);
481 cyber2000_grphw(0x05, 0x60, cfb);
482 cyber2000_grphw(0x06, 0x05, cfb);
483 cyber2000_grphw(0x07, 0x0f, cfb);
484 cyber2000_grphw(0x08, 0xff, cfb);
488 cyber2000_attrw(i, i, cfb);
490 cyber2000_attrw(0x10, 0x01, cfb);
491 cyber2000_attrw(0x11, 0x00, cfb);
492 cyber2000_attrw(0x12, 0x0f, cfb);
493 cyber2000_attrw(0x13, 0x00, cfb);
494 cyber2000_attrw(0x14, 0x00, cfb);
497 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb);
498 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb);
499 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb);
500 cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb);
501 cyber2000_grphw(0x90, 0x01, cfb);
502 cyber2000_grphw(0xb9, 0x80, cfb);
503 cyber2000_grphw(0xb9, 0x00, cfb);
505 cfb->ramdac_ctrl = hw->ramdac;
506 cyber2000fb_write_ramdac_ctrl(cfb);
508 cyber2000fb_writeb(0x20, 0x3c0, cfb);
509 cyber2000fb_writeb(0xff, 0x3c6, cfb);
511 cyber2000_grphw(0x14, hw->fetch, cfb);
513 ((hw->pitch >> 4) & 0x30), cfb);
514 cyber2000_grphw(EXT_SEQ_MISC, hw->extseqmisc, cfb);
519 cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb);
520 cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb);
521 cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb);
525 cyber2000fb_update_start(struct cfb_info *cfb, struct fb_var_screeninfo *var)
540 cyber2000_grphw(0x10, base >> 16 | 0x10, cfb);
541 cyber2000_crtcw(0x0c, base >> 8, cfb);
542 cyber2000_crtcw(0x0d, base, cfb);
548 cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb,
648 cyber2000fb_decode_clock(struct par_info *hw, struct cfb_info *cfb,
652 const u_long ref_ps = cfb->ref_ps;
665 new_pll = pll_ps / cfb->divisors[div2];
744 struct cfb_info *cfb = (struct cfb_info *)info;
825 if (mem > cfb->fb.fix.smem_len)
826 var->yres_virtual = cfb->fb.fix.smem_len * 8 /
834 err = cyber2000fb_decode_clock(&hw, cfb, var);
838 err = cyber2000fb_decode_crtc(&hw, cfb, var);
847 struct cfb_info *cfb = (struct cfb_info *)info;
848 struct fb_var_screeninfo *var = &cfb->fb.var;
911 BUG_ON(cyber2000fb_decode_clock(&hw, cfb, var) != 0);
912 BUG_ON(cyber2000fb_decode_crtc(&hw, cfb, var) != 0);
916 if (!(cfb->mem_ctl2 & MEM_CTL2_64BIT))
920 cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
929 mem = cfb->fb.fix.line_length * var->yres_virtual;
930 BUG_ON(mem > cfb->fb.fix.smem_len);
939 cfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
941 cfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
943 cfb->fb.fix.visual = FB_VISUAL_DIRECTCOLOR;
945 cyber2000fb_set_timing(cfb, &hw);
946 cyber2000fb_update_start(cfb, var);
957 struct cfb_info *cfb = (struct cfb_info *)info;
959 if (cyber2000fb_update_start(cfb, var))
962 cfb->fb.var.xoffset = var->xoffset;
963 cfb->fb.var.yoffset = var->yoffset;
966 cfb->fb.var.vmode |= FB_VMODE_YWRAP;
968 cfb->fb.var.vmode &= ~FB_VMODE_YWRAP;
993 struct cfb_info *cfb = (struct cfb_info *)info;
1012 cyber2000_grphw(EXT_SYNC_CTL, sync, cfb);
1016 cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS |
1018 cyber2000fb_write_ramdac_ctrl(cfb);
1026 cyber2000fb_writeb(i, 0x3c8, cfb);
1027 cyber2000fb_writeb(0, 0x3c9, cfb);
1028 cyber2000fb_writeb(0, 0x3c9, cfb);
1029 cyber2000fb_writeb(0, 0x3c9, cfb);
1033 cyber2000fb_writeb(i, 0x3c8, cfb);
1034 cyber2000fb_writeb(cfb->palette[i].red, 0x3c9, cfb);
1035 cyber2000fb_writeb(cfb->palette[i].green, 0x3c9, cfb);
1036 cyber2000fb_writeb(cfb->palette[i].blue, 0x3c9, cfb);
1042 cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS |
1044 cyber2000fb_write_ramdac_ctrl(cfb);
1073 void cyber2000fb_enable_extregs(struct cfb_info *cfb)
1075 cfb->func_use_count += 1;
1077 if (cfb->func_use_count == 1) {
1080 old = cyber2000_grphr(EXT_FUNC_CTL, cfb);
1082 cyber2000_grphw(EXT_FUNC_CTL, old, cfb);
1090 void cyber2000fb_disable_extregs(struct cfb_info *cfb)
1092 if (cfb->func_use_count == 1) {
1095 old = cyber2000_grphr(EXT_FUNC_CTL, cfb);
1097 cyber2000_grphw(EXT_FUNC_CTL, old, cfb);
1100 if (cfb->func_use_count == 0)
1103 cfb->func_use_count -= 1;
1107 void cyber2000fb_get_fb_var(struct cfb_info *cfb, struct fb_var_screeninfo *var)
1109 memcpy(var, &cfb->fb.var, sizeof(struct fb_var_screeninfo));
1200 static void cyberpro_init_hw(struct cfb_info *cfb)
1205 cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb);
1207 if (cfb->id == ID_CYBERPRO_5000) {
1209 cyber2000fb_writeb(0xba, 0x3ce, cfb);
1210 val = cyber2000fb_readb(0x3cf, cfb) & 0x80;
1211 cyber2000fb_writeb(val, 0x3cf, cfb);
1218 struct cfb_info *cfb;
1220 cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL);
1221 if (!cfb)
1225 cfb->id = id;
1228 cfb->ref_ps = 40690; /* 24.576 MHz */
1230 cfb->ref_ps = 69842; /* 14.31818 MHz (69841?) */
1232 cfb->divisors[0] = 1;
1233 cfb->divisors[1] = 2;
1234 cfb->divisors[2] = 4;
1237 cfb->divisors[3] = 8;
1239 cfb->divisors[3] = 6;
1241 strcpy(cfb->fb.fix.id, name);
1243 cfb->fb.fix.type = FB_TYPE_PACKED_PIXELS;
1244 cfb->fb.fix.type_aux = 0;
1245 cfb->fb.fix.xpanstep = 0;
1246 cfb->fb.fix.ypanstep = 1;
1247 cfb->fb.fix.ywrapstep = 0;
1251 cfb->fb.fix.accel = 0;
1255 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2000;
1259 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2010;
1263 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER5000;
1267 cfb->fb.var.nonstd = 0;
1268 cfb->fb.var.activate = FB_ACTIVATE_NOW;
1269 cfb->fb.var.height = -1;
1270 cfb->fb.var.width = -1;
1271 cfb->fb.var.accel_flags = FB_ACCELF_TEXT;
1273 cfb->fb.fbops = &cyber2000fb_ops;
1274 cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
1275 cfb->fb.pseudo_palette = cfb->pseudo_palette;
1277 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0);
1279 return cfb;
1282 static void cyberpro_free_fb_info(struct cfb_info *cfb)
1284 if (cfb) {
1288 fb_alloc_cmap(&cfb->fb.cmap, 0, 0);
1290 kfree(cfb);
1333 static int __devinit cyberpro_common_probe(struct cfb_info *cfb)
1339 cyberpro_init_hw(cfb);
1346 cfb->mem_ctl1 = cyber2000_grphr(EXT_MEM_CTL1, cfb);
1347 cfb->mem_ctl2 = cyber2000_grphr(EXT_MEM_CTL2, cfb);
1352 switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) {
1367 cfb->fb.fix.smem_len = smem_size;
1368 cfb->fb.fix.mmio_len = MMIO_SIZE;
1369 cfb->fb.screen_base = cfb->region;
1372 if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0,
1374 printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id);
1378 cfb->fb.var.yres_virtual = cfb->fb.fix.smem_len * 8 /
1379 (cfb->fb.var.bits_per_pixel * cfb->fb.var.xres_virtual);
1381 if (cfb->fb.var.yres_virtual < cfb->fb.var.yres)
1382 cfb->fb.var.yres_virtual = cfb->fb.var.yres;
1384 /* fb_set_var(&cfb->fb.var, -1, &cfb->fb); */
1392 h_sync = 1953125000 / cfb->fb.var.pixclock;
1393 h_sync = h_sync * 512 / (cfb->fb.var.xres + cfb->fb.var.left_margin +
1394 cfb->fb.var.right_margin + cfb->fb.var.hsync_len);
1395 v_sync = h_sync / (cfb->fb.var.yres + cfb->fb.var.upper_margin +
1396 cfb->fb.var.lower_margin + cfb->fb.var.vsync_len);
1399 cfb->fb.fix.id, cfb->fb.fix.smem_len >> 10,
1400 cfb->fb.var.xres, cfb->fb.var.yres,
1403 if (cfb->dev)
1404 cfb->fb.device = &cfb->dev->dev;
1405 err = register_framebuffer(&cfb->fb);
1411 static void cyberpro_common_resume(struct cfb_info *cfb)
1413 cyberpro_init_hw(cfb);
1418 cyber2000_grphw(EXT_MEM_CTL1, cfb->mem_ctl1, cfb);
1419 cyber2000_grphw(EXT_MEM_CTL2, cfb->mem_ctl2, cfb);
1425 cyber2000fb_set_par(&cfb->fb);
1434 struct cfb_info *cfb;
1440 cfb = cyberpro_alloc_fb_info(ID_CYBERPRO_2010, "CyberPro2010");
1441 if (!cfb)
1444 cfb->dev = NULL;
1445 cfb->region = ioremap(FB_START, FB_SIZE);
1446 if (!cfb->region)
1449 cfb->regs = cfb->region + MMIO_OFFSET;
1450 cfb->fb.fix.mmio_start = FB_START + MMIO_OFFSET;
1451 cfb->fb.fix.smem_start = FB_START;
1459 cyber2000fb_writeb(0x18, 0x46e8, cfb);
1460 cyber2000fb_writeb(0x01, 0x102, cfb);
1461 cyber2000fb_writeb(0x08, 0x46e8, cfb);
1462 cyber2000fb_writeb(EXT_BIU_MISC, 0x3ce, cfb);
1463 cyber2000fb_writeb(EXT_BIU_MISC_LIN_ENABLE, 0x3cf, cfb);
1465 cfb->mclk_mult = 0xdb;
1466 cfb->mclk_div = 0x54;
1468 err = cyberpro_common_probe(cfb);
1473 int_cfb_info = cfb;
1478 iounmap(cfb->region);
1480 cyberpro_free_fb_info(cfb);
1502 static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
1544 if (cfb->id == ID_CYBERPRO_2010) {
1546 cfb->fb.fix.id);
1548 val = cyber2000_grphr(EXT_BUS_CTL, cfb);
1551 cfb->fb.fix.id);
1555 if (cfb->id == ID_CYBERPRO_5000)
1558 cyber2000_grphw(EXT_BUS_CTL, val, cfb);
1568 struct cfb_info *cfb;
1579 cfb = cyberpro_alloc_fb_info(id->driver_data, name);
1580 if (!cfb)
1583 err = pci_request_regions(dev, cfb->fb.fix.id);
1587 cfb->dev = dev;
1588 cfb->region = pci_ioremap_bar(dev, 0);
1589 if (!cfb->region)
1592 cfb->regs = cfb->region + MMIO_OFFSET;
1593 cfb->fb.fix.mmio_start = pci_resource_start(dev, 0) + MMIO_OFFSET;
1594 cfb->fb.fix.smem_start = pci_resource_start(dev, 0);
1602 err = cyberpro_pci_enable_mmio(cfb);
1606 cfb->mclk_mult = cyber2000_grphr(EXT_MCLK_MULT, cfb);
1607 cfb->mclk_div = cyber2000_grphr(EXT_MCLK_DIV, cfb);
1614 cfb->mclk_mult = 0xdb;
1615 cfb->mclk_div = 0x54;
1619 err = cyberpro_common_probe(cfb);
1626 pci_set_drvdata(dev, cfb);
1628 int_cfb_info = cfb;
1633 iounmap(cfb->region);
1637 cyberpro_free_fb_info(cfb);
1644 struct cfb_info *cfb = pci_get_drvdata(dev);
1646 if (cfb) {
1652 if (unregister_framebuffer(&cfb->fb))
1655 cfb->fb.fix.id);
1656 iounmap(cfb->region);
1657 cyberpro_free_fb_info(cfb);
1664 if (cfb == int_cfb_info)
1681 struct cfb_info *cfb = pci_get_drvdata(dev);
1683 if (cfb) {
1684 cyberpro_pci_enable_mmio(cfb);
1685 cyberpro_common_resume(cfb);