Lines Matching refs:cfb
114 #define cyber2000fb_writel(val, reg, cfb) writel(val, (cfb)->regs + (reg)) argument
115 #define cyber2000fb_writew(val, reg, cfb) writew(val, (cfb)->regs + (reg)) argument
116 #define cyber2000fb_writeb(val, reg, cfb) writeb(val, (cfb)->regs + (reg)) argument
118 #define cyber2000fb_readb(reg, cfb) readb((cfb)->regs + (reg)) argument
121 cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_crtcw() argument
123 cyber2000fb_writew((reg & 255) | val << 8, 0x3d4, cfb); in cyber2000_crtcw()
127 cyber2000_grphw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_grphw() argument
129 cyber2000fb_writew((reg & 255) | val << 8, 0x3ce, cfb); in cyber2000_grphw()
133 cyber2000_grphr(unsigned int reg, struct cfb_info *cfb) in cyber2000_grphr() argument
135 cyber2000fb_writeb(reg, 0x3ce, cfb); in cyber2000_grphr()
136 return cyber2000fb_readb(0x3cf, cfb); in cyber2000_grphr()
140 cyber2000_attrw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_attrw() argument
142 cyber2000fb_readb(0x3da, cfb); in cyber2000_attrw()
143 cyber2000fb_writeb(reg, 0x3c0, cfb); in cyber2000_attrw()
144 cyber2000fb_readb(0x3c1, cfb); in cyber2000_attrw()
145 cyber2000fb_writeb(val, 0x3c0, cfb); in cyber2000_attrw()
149 cyber2000_seqw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_seqw() argument
151 cyber2000fb_writew((reg & 255) | val << 8, 0x3c4, cfb); in cyber2000_seqw()
162 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_fillrect() local
165 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_fillrect()
170 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_fillrect()
171 cyber2000fb_writew(rect->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_fillrect()
172 cyber2000fb_writew(rect->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_fillrect()
175 if (cfb->fb.var.bits_per_pixel > 8) in cyber2000fb_fillrect()
176 col = ((u32 *)cfb->fb.pseudo_palette)[col]; in cyber2000fb_fillrect()
177 cyber2000fb_writel(col, CO_REG_FGCOLOUR, cfb); in cyber2000fb_fillrect()
179 dst = rect->dx + rect->dy * cfb->fb.var.xres_virtual; in cyber2000fb_fillrect()
180 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_fillrect()
181 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_fillrect()
185 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_fillrect()
186 cyber2000fb_writeb(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_fillrect()
187 cyber2000fb_writew(CO_CMD_L_PATTERN_FGCOL, CO_REG_CMD_L, cfb); in cyber2000fb_fillrect()
188 cyber2000fb_writew(CO_CMD_H_BLITTER, CO_REG_CMD_H, cfb); in cyber2000fb_fillrect()
194 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_copyarea() local
198 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_copyarea()
203 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_copyarea()
204 cyber2000fb_writew(region->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_copyarea()
205 cyber2000fb_writew(region->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_copyarea()
207 src = region->sx + region->sy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
208 dst = region->dx + region->dy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
217 src += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
218 dst += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
222 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_copyarea()
223 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_copyarea()
227 cyber2000fb_writel(src, CO_REG_SRC1_PTR, cfb); in cyber2000fb_copyarea()
228 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_copyarea()
229 cyber2000fb_writew(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_copyarea()
230 cyber2000fb_writew(cmd, CO_REG_CMD_L, cfb); in cyber2000fb_copyarea()
232 CO_REG_CMD_H, cfb); in cyber2000fb_copyarea()
244 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_sync() local
247 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) in cyber2000fb_sync()
250 while (cyber2000fb_readb(CO_REG_CONTROL, cfb) & CO_CTRL_BUSY) { in cyber2000fb_sync()
253 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_sync()
279 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_setcolreg() local
280 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_setcolreg()
284 switch (cfb->fb.fix.visual) { in cyber2000fb_setcolreg()
305 cfb->palette[regno].red = red; in cyber2000fb_setcolreg()
306 cfb->palette[regno].green = green; in cyber2000fb_setcolreg()
307 cfb->palette[regno].blue = blue; in cyber2000fb_setcolreg()
309 cyber2000fb_writeb(regno, 0x3c8, cfb); in cyber2000fb_setcolreg()
310 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
311 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
312 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
331 cfb->palette[regno << 2].green = green; in cyber2000fb_setcolreg()
337 cyber2000fb_writeb(regno << 2, 0x3c8, cfb); in cyber2000fb_setcolreg()
338 cyber2000fb_writeb(cfb->palette[regno >> 1].red, in cyber2000fb_setcolreg()
339 0x3c9, cfb); in cyber2000fb_setcolreg()
340 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
341 cyber2000fb_writeb(cfb->palette[regno >> 1].blue, in cyber2000fb_setcolreg()
342 0x3c9, cfb); in cyber2000fb_setcolreg()
344 green = cfb->palette[regno << 3].green; in cyber2000fb_setcolreg()
350 cfb->palette[regno << 3].red = red; in cyber2000fb_setcolreg()
351 cfb->palette[regno << 3].green = green; in cyber2000fb_setcolreg()
352 cfb->palette[regno << 3].blue = blue; in cyber2000fb_setcolreg()
358 cyber2000fb_writeb(regno << 3, 0x3c8, cfb); in cyber2000fb_setcolreg()
359 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
360 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
361 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
366 cfb->palette[regno << 4].red = red; in cyber2000fb_setcolreg()
367 cfb->palette[regno << 4].green = green; in cyber2000fb_setcolreg()
368 cfb->palette[regno << 4].blue = blue; in cyber2000fb_setcolreg()
374 cyber2000fb_writeb(regno << 4, 0x3c8, cfb); in cyber2000fb_setcolreg()
375 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
376 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
377 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
413 ((u32 *)cfb->fb.pseudo_palette)[regno] = pseudo_val; in cyber2000fb_setcolreg()
444 static void cyber2000fb_write_ramdac_ctrl(struct cfb_info *cfb) in cyber2000fb_write_ramdac_ctrl() argument
447 unsigned int val = cfb->ramdac_ctrl | cfb->ramdac_powerdown; in cyber2000fb_write_ramdac_ctrl()
449 cyber2000fb_writeb(0x56, 0x3ce, cfb); in cyber2000fb_write_ramdac_ctrl()
450 i = cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
451 cyber2000fb_writeb(i | 4, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
452 cyber2000fb_writeb(val, 0x3c6, cfb); in cyber2000fb_write_ramdac_ctrl()
453 cyber2000fb_writeb(i, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
455 cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
458 static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw) in cyber2000fb_set_timing() argument
466 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_set_timing()
467 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
468 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
469 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
472 cyber2000fb_writeb(0xef, 0x3c2, cfb); in cyber2000fb_set_timing()
473 cyber2000_crtcw(0x11, 0x0b, cfb); in cyber2000fb_set_timing()
474 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
476 cyber2000_seqw(0x00, 0x01, cfb); in cyber2000fb_set_timing()
477 cyber2000_seqw(0x01, 0x01, cfb); in cyber2000fb_set_timing()
478 cyber2000_seqw(0x02, 0x0f, cfb); in cyber2000fb_set_timing()
479 cyber2000_seqw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
480 cyber2000_seqw(0x04, 0x0e, cfb); in cyber2000fb_set_timing()
481 cyber2000_seqw(0x00, 0x03, cfb); in cyber2000fb_set_timing()
484 cyber2000_crtcw(crtc_idx[i], hw->crtc[i], cfb); in cyber2000fb_set_timing()
487 cyber2000_crtcw(i, 0, cfb); in cyber2000fb_set_timing()
489 cyber2000_grphw(EXT_CRT_VRTOFL, hw->crtc_ofl, cfb); in cyber2000fb_set_timing()
490 cyber2000_grphw(0x00, 0x00, cfb); in cyber2000fb_set_timing()
491 cyber2000_grphw(0x01, 0x00, cfb); in cyber2000fb_set_timing()
492 cyber2000_grphw(0x02, 0x00, cfb); in cyber2000fb_set_timing()
493 cyber2000_grphw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
494 cyber2000_grphw(0x04, 0x00, cfb); in cyber2000fb_set_timing()
495 cyber2000_grphw(0x05, 0x60, cfb); in cyber2000fb_set_timing()
496 cyber2000_grphw(0x06, 0x05, cfb); in cyber2000fb_set_timing()
497 cyber2000_grphw(0x07, 0x0f, cfb); in cyber2000fb_set_timing()
498 cyber2000_grphw(0x08, 0xff, cfb); in cyber2000fb_set_timing()
502 cyber2000_attrw(i, i, cfb); in cyber2000fb_set_timing()
504 cyber2000_attrw(0x10, 0x01, cfb); in cyber2000fb_set_timing()
505 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
506 cyber2000_attrw(0x12, 0x0f, cfb); in cyber2000fb_set_timing()
507 cyber2000_attrw(0x13, 0x00, cfb); in cyber2000fb_set_timing()
508 cyber2000_attrw(0x14, 0x00, cfb); in cyber2000fb_set_timing()
511 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
512 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); in cyber2000fb_set_timing()
513 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); in cyber2000fb_set_timing()
514 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); in cyber2000fb_set_timing()
515 cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb); in cyber2000fb_set_timing()
516 cyber2000_grphw(0x90, 0x01, cfb); in cyber2000fb_set_timing()
517 cyber2000_grphw(0xb9, 0x80, cfb); in cyber2000fb_set_timing()
518 cyber2000_grphw(0xb9, 0x00, cfb); in cyber2000fb_set_timing()
519 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
521 cfb->ramdac_ctrl = hw->ramdac; in cyber2000fb_set_timing()
522 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_set_timing()
524 cyber2000fb_writeb(0x20, 0x3c0, cfb); in cyber2000fb_set_timing()
525 cyber2000fb_writeb(0xff, 0x3c6, cfb); in cyber2000fb_set_timing()
527 cyber2000_grphw(0x14, hw->fetch, cfb); in cyber2000fb_set_timing()
529 ((hw->pitch >> 4) & 0x30), cfb); in cyber2000fb_set_timing()
530 cyber2000_grphw(EXT_SEQ_MISC, hw->extseqmisc, cfb); in cyber2000fb_set_timing()
535 cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb); in cyber2000fb_set_timing()
536 cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb); in cyber2000fb_set_timing()
537 cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb); in cyber2000fb_set_timing()
541 cyber2000fb_update_start(struct cfb_info *cfb, struct fb_var_screeninfo *var) in cyber2000fb_update_start() argument
556 cyber2000_grphw(0x10, base >> 16 | 0x10, cfb); in cyber2000fb_update_start()
557 cyber2000_crtcw(0x0c, base >> 8, cfb); in cyber2000fb_update_start()
558 cyber2000_crtcw(0x0d, base, cfb); in cyber2000fb_update_start()
564 cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_crtc() argument
665 cyber2000fb_decode_clock(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_clock() argument
669 const u_long ref_ps = cfb->ref_ps; in cyber2000fb_decode_clock()
682 new_pll = pll_ps / cfb->divisors[div2]; in cyber2000fb_decode_clock()
761 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_check_var() local
842 if (mem > cfb->fb.fix.smem_len) in cyber2000fb_check_var()
843 var->yres_virtual = cfb->fb.fix.smem_len * 8 / in cyber2000fb_check_var()
851 err = cyber2000fb_decode_clock(&hw, cfb, var); in cyber2000fb_check_var()
855 err = cyber2000fb_decode_crtc(&hw, cfb, var); in cyber2000fb_check_var()
864 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_set_par() local
865 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_set_par()
928 BUG_ON(cyber2000fb_decode_clock(&hw, cfb, var) != 0); in cyber2000fb_set_par()
929 BUG_ON(cyber2000fb_decode_crtc(&hw, cfb, var) != 0); in cyber2000fb_set_par()
933 if (!(cfb->mem_ctl2 & MEM_CTL2_64BIT)) in cyber2000fb_set_par()
937 cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; in cyber2000fb_set_par()
946 mem = cfb->fb.fix.line_length * var->yres_virtual; in cyber2000fb_set_par()
947 BUG_ON(mem > cfb->fb.fix.smem_len); in cyber2000fb_set_par()
956 cfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; in cyber2000fb_set_par()
958 cfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; in cyber2000fb_set_par()
960 cfb->fb.fix.visual = FB_VISUAL_DIRECTCOLOR; in cyber2000fb_set_par()
962 cyber2000fb_set_timing(cfb, &hw); in cyber2000fb_set_par()
963 cyber2000fb_update_start(cfb, var); in cyber2000fb_set_par()
974 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_pan_display() local
976 if (cyber2000fb_update_start(cfb, var)) in cyber2000fb_pan_display()
979 cfb->fb.var.xoffset = var->xoffset; in cyber2000fb_pan_display()
980 cfb->fb.var.yoffset = var->yoffset; in cyber2000fb_pan_display()
983 cfb->fb.var.vmode |= FB_VMODE_YWRAP; in cyber2000fb_pan_display()
985 cfb->fb.var.vmode &= ~FB_VMODE_YWRAP; in cyber2000fb_pan_display()
1010 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_blank() local
1029 cyber2000_grphw(EXT_SYNC_CTL, sync, cfb); in cyber2000fb_blank()
1033 cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1035 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1043 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1044 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1045 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1046 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1050 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1051 cyber2000fb_writeb(cfb->palette[i].red, 0x3c9, cfb); in cyber2000fb_blank()
1052 cyber2000fb_writeb(cfb->palette[i].green, 0x3c9, cfb); in cyber2000fb_blank()
1053 cyber2000fb_writeb(cfb->palette[i].blue, 0x3c9, cfb); in cyber2000fb_blank()
1059 cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1061 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1090 void cyber2000fb_enable_extregs(struct cfb_info *cfb) in cyber2000fb_enable_extregs() argument
1092 cfb->func_use_count += 1; in cyber2000fb_enable_extregs()
1094 if (cfb->func_use_count == 1) { in cyber2000fb_enable_extregs()
1097 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_enable_extregs()
1099 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_enable_extregs()
1107 void cyber2000fb_disable_extregs(struct cfb_info *cfb) in cyber2000fb_disable_extregs() argument
1109 if (cfb->func_use_count == 1) { in cyber2000fb_disable_extregs()
1112 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_disable_extregs()
1114 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_disable_extregs()
1117 if (cfb->func_use_count == 0) in cyber2000fb_disable_extregs()
1120 cfb->func_use_count -= 1; in cyber2000fb_disable_extregs()
1166 static void cyber2000fb_enable_ddc(struct cfb_info *cfb) in cyber2000fb_enable_ddc() argument
1168 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_enable_ddc()
1169 cyber2000fb_writew(0x1bf, 0x3ce, cfb); in cyber2000fb_enable_ddc()
1172 static void cyber2000fb_disable_ddc(struct cfb_info *cfb) in cyber2000fb_disable_ddc() argument
1174 cyber2000fb_writew(0x0bf, 0x3ce, cfb); in cyber2000fb_disable_ddc()
1175 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_disable_ddc()
1181 struct cfb_info *cfb = data; in cyber2000fb_ddc_setscl() local
1184 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setscl()
1185 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setscl()
1190 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setscl()
1191 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setscl()
1196 struct cfb_info *cfb = data; in cyber2000fb_ddc_setsda() local
1199 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setsda()
1200 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setsda()
1205 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setsda()
1206 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setsda()
1211 struct cfb_info *cfb = data; in cyber2000fb_ddc_getscl() local
1214 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getscl()
1215 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SCL_IN); in cyber2000fb_ddc_getscl()
1216 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getscl()
1223 struct cfb_info *cfb = data; in cyber2000fb_ddc_getsda() local
1226 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getsda()
1227 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SDA_IN); in cyber2000fb_ddc_getsda()
1228 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getsda()
1233 static int cyber2000fb_setup_ddc_bus(struct cfb_info *cfb) in cyber2000fb_setup_ddc_bus() argument
1235 strlcpy(cfb->ddc_adapter.name, cfb->fb.fix.id, in cyber2000fb_setup_ddc_bus()
1236 sizeof(cfb->ddc_adapter.name)); in cyber2000fb_setup_ddc_bus()
1237 cfb->ddc_adapter.owner = THIS_MODULE; in cyber2000fb_setup_ddc_bus()
1238 cfb->ddc_adapter.class = I2C_CLASS_DDC; in cyber2000fb_setup_ddc_bus()
1239 cfb->ddc_adapter.algo_data = &cfb->ddc_algo; in cyber2000fb_setup_ddc_bus()
1240 cfb->ddc_adapter.dev.parent = cfb->fb.device; in cyber2000fb_setup_ddc_bus()
1241 cfb->ddc_algo.setsda = cyber2000fb_ddc_setsda; in cyber2000fb_setup_ddc_bus()
1242 cfb->ddc_algo.setscl = cyber2000fb_ddc_setscl; in cyber2000fb_setup_ddc_bus()
1243 cfb->ddc_algo.getsda = cyber2000fb_ddc_getsda; in cyber2000fb_setup_ddc_bus()
1244 cfb->ddc_algo.getscl = cyber2000fb_ddc_getscl; in cyber2000fb_setup_ddc_bus()
1245 cfb->ddc_algo.udelay = 10; in cyber2000fb_setup_ddc_bus()
1246 cfb->ddc_algo.timeout = 20; in cyber2000fb_setup_ddc_bus()
1247 cfb->ddc_algo.data = cfb; in cyber2000fb_setup_ddc_bus()
1249 i2c_set_adapdata(&cfb->ddc_adapter, cfb); in cyber2000fb_setup_ddc_bus()
1251 return i2c_bit_add_bus(&cfb->ddc_adapter); in cyber2000fb_setup_ddc_bus()
1258 struct cfb_info *cfb = data; in cyber2000fb_i2c_setsda() local
1261 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1262 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setsda()
1266 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setsda()
1267 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1272 struct cfb_info *cfb = data; in cyber2000fb_i2c_setscl() local
1275 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1276 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setscl()
1280 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setscl()
1281 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1286 struct cfb_info *cfb = data; in cyber2000fb_i2c_getsda() local
1289 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1290 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_DAT); in cyber2000fb_i2c_getsda()
1291 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1298 struct cfb_info *cfb = data; in cyber2000fb_i2c_getscl() local
1301 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1302 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_CLK); in cyber2000fb_i2c_getscl()
1303 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1308 static int cyber2000fb_i2c_register(struct cfb_info *cfb) in cyber2000fb_i2c_register() argument
1310 strlcpy(cfb->i2c_adapter.name, cfb->fb.fix.id, in cyber2000fb_i2c_register()
1311 sizeof(cfb->i2c_adapter.name)); in cyber2000fb_i2c_register()
1312 cfb->i2c_adapter.owner = THIS_MODULE; in cyber2000fb_i2c_register()
1313 cfb->i2c_adapter.algo_data = &cfb->i2c_algo; in cyber2000fb_i2c_register()
1314 cfb->i2c_adapter.dev.parent = cfb->fb.device; in cyber2000fb_i2c_register()
1315 cfb->i2c_algo.setsda = cyber2000fb_i2c_setsda; in cyber2000fb_i2c_register()
1316 cfb->i2c_algo.setscl = cyber2000fb_i2c_setscl; in cyber2000fb_i2c_register()
1317 cfb->i2c_algo.getsda = cyber2000fb_i2c_getsda; in cyber2000fb_i2c_register()
1318 cfb->i2c_algo.getscl = cyber2000fb_i2c_getscl; in cyber2000fb_i2c_register()
1319 cfb->i2c_algo.udelay = 5; in cyber2000fb_i2c_register()
1320 cfb->i2c_algo.timeout = msecs_to_jiffies(100); in cyber2000fb_i2c_register()
1321 cfb->i2c_algo.data = cfb; in cyber2000fb_i2c_register()
1323 return i2c_bit_add_bus(&cfb->i2c_adapter); in cyber2000fb_i2c_register()
1326 static void cyber2000fb_i2c_unregister(struct cfb_info *cfb) in cyber2000fb_i2c_unregister() argument
1328 i2c_del_adapter(&cfb->i2c_adapter); in cyber2000fb_i2c_unregister()
1331 #define cyber2000fb_i2c_register(cfb) (0) argument
1332 #define cyber2000fb_i2c_unregister(cfb) do { } while (0) argument
1392 static void cyberpro_init_hw(struct cfb_info *cfb) in cyberpro_init_hw() argument
1397 cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb); in cyberpro_init_hw()
1399 if (cfb->id == ID_CYBERPRO_5000) { in cyberpro_init_hw()
1401 cyber2000fb_writeb(0xba, 0x3ce, cfb); in cyberpro_init_hw()
1402 val = cyber2000fb_readb(0x3cf, cfb) & 0x80; in cyberpro_init_hw()
1403 cyber2000fb_writeb(val, 0x3cf, cfb); in cyberpro_init_hw()
1409 struct cfb_info *cfb; in cyberpro_alloc_fb_info() local
1411 cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL); in cyberpro_alloc_fb_info()
1412 if (!cfb) in cyberpro_alloc_fb_info()
1416 cfb->id = id; in cyberpro_alloc_fb_info()
1419 cfb->ref_ps = 40690; /* 24.576 MHz */ in cyberpro_alloc_fb_info()
1421 cfb->ref_ps = 69842; /* 14.31818 MHz (69841?) */ in cyberpro_alloc_fb_info()
1423 cfb->divisors[0] = 1; in cyberpro_alloc_fb_info()
1424 cfb->divisors[1] = 2; in cyberpro_alloc_fb_info()
1425 cfb->divisors[2] = 4; in cyberpro_alloc_fb_info()
1428 cfb->divisors[3] = 8; in cyberpro_alloc_fb_info()
1430 cfb->divisors[3] = 6; in cyberpro_alloc_fb_info()
1432 strcpy(cfb->fb.fix.id, name); in cyberpro_alloc_fb_info()
1434 cfb->fb.fix.type = FB_TYPE_PACKED_PIXELS; in cyberpro_alloc_fb_info()
1435 cfb->fb.fix.type_aux = 0; in cyberpro_alloc_fb_info()
1436 cfb->fb.fix.xpanstep = 0; in cyberpro_alloc_fb_info()
1437 cfb->fb.fix.ypanstep = 1; in cyberpro_alloc_fb_info()
1438 cfb->fb.fix.ywrapstep = 0; in cyberpro_alloc_fb_info()
1442 cfb->fb.fix.accel = 0; in cyberpro_alloc_fb_info()
1446 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2000; in cyberpro_alloc_fb_info()
1450 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2010; in cyberpro_alloc_fb_info()
1454 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER5000; in cyberpro_alloc_fb_info()
1458 cfb->fb.var.nonstd = 0; in cyberpro_alloc_fb_info()
1459 cfb->fb.var.activate = FB_ACTIVATE_NOW; in cyberpro_alloc_fb_info()
1460 cfb->fb.var.height = -1; in cyberpro_alloc_fb_info()
1461 cfb->fb.var.width = -1; in cyberpro_alloc_fb_info()
1462 cfb->fb.var.accel_flags = FB_ACCELF_TEXT; in cyberpro_alloc_fb_info()
1464 cfb->fb.fbops = &cyber2000fb_ops; in cyberpro_alloc_fb_info()
1465 cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; in cyberpro_alloc_fb_info()
1466 cfb->fb.pseudo_palette = cfb->pseudo_palette; in cyberpro_alloc_fb_info()
1468 spin_lock_init(&cfb->reg_b0_lock); in cyberpro_alloc_fb_info()
1470 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0); in cyberpro_alloc_fb_info()
1472 return cfb; in cyberpro_alloc_fb_info()
1475 static void cyberpro_free_fb_info(struct cfb_info *cfb) in cyberpro_free_fb_info() argument
1477 if (cfb) { in cyberpro_free_fb_info()
1481 fb_alloc_cmap(&cfb->fb.cmap, 0, 0); in cyberpro_free_fb_info()
1483 kfree(cfb); in cyberpro_free_fb_info()
1526 static int cyberpro_common_probe(struct cfb_info *cfb) in cyberpro_common_probe() argument
1532 cyberpro_init_hw(cfb); in cyberpro_common_probe()
1539 cfb->mem_ctl1 = cyber2000_grphr(EXT_MEM_CTL1, cfb); in cyberpro_common_probe()
1540 cfb->mem_ctl2 = cyber2000_grphr(EXT_MEM_CTL2, cfb); in cyberpro_common_probe()
1545 switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) { in cyberpro_common_probe()
1560 cfb->fb.fix.smem_len = smem_size; in cyberpro_common_probe()
1561 cfb->fb.fix.mmio_len = MMIO_SIZE; in cyberpro_common_probe()
1562 cfb->fb.screen_base = cfb->region; in cyberpro_common_probe()
1565 if (cyber2000fb_setup_ddc_bus(cfb) == 0) in cyberpro_common_probe()
1566 cfb->ddc_registered = true; in cyberpro_common_probe()
1570 if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0, in cyberpro_common_probe()
1572 printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id); in cyberpro_common_probe()
1576 cfb->fb.var.yres_virtual = cfb->fb.fix.smem_len * 8 / in cyberpro_common_probe()
1577 (cfb->fb.var.bits_per_pixel * cfb->fb.var.xres_virtual); in cyberpro_common_probe()
1579 if (cfb->fb.var.yres_virtual < cfb->fb.var.yres) in cyberpro_common_probe()
1580 cfb->fb.var.yres_virtual = cfb->fb.var.yres; in cyberpro_common_probe()
1590 h_sync = 1953125000 / cfb->fb.var.pixclock; in cyberpro_common_probe()
1591 h_sync = h_sync * 512 / (cfb->fb.var.xres + cfb->fb.var.left_margin + in cyberpro_common_probe()
1592 cfb->fb.var.right_margin + cfb->fb.var.hsync_len); in cyberpro_common_probe()
1593 v_sync = h_sync / (cfb->fb.var.yres + cfb->fb.var.upper_margin + in cyberpro_common_probe()
1594 cfb->fb.var.lower_margin + cfb->fb.var.vsync_len); in cyberpro_common_probe()
1597 cfb->fb.fix.id, cfb->fb.fix.smem_len >> 10, in cyberpro_common_probe()
1598 cfb->fb.var.xres, cfb->fb.var.yres, in cyberpro_common_probe()
1601 err = cyber2000fb_i2c_register(cfb); in cyberpro_common_probe()
1605 err = register_framebuffer(&cfb->fb); in cyberpro_common_probe()
1607 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_probe()
1611 if (err && cfb->ddc_registered) in cyberpro_common_probe()
1612 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_probe()
1617 static void cyberpro_common_remove(struct cfb_info *cfb) in cyberpro_common_remove() argument
1619 unregister_framebuffer(&cfb->fb); in cyberpro_common_remove()
1621 if (cfb->ddc_registered) in cyberpro_common_remove()
1622 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_remove()
1624 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_remove()
1627 static void cyberpro_common_resume(struct cfb_info *cfb) in cyberpro_common_resume() argument
1629 cyberpro_init_hw(cfb); in cyberpro_common_resume()
1634 cyber2000_grphw(EXT_MEM_CTL1, cfb->mem_ctl1, cfb); in cyberpro_common_resume()
1635 cyber2000_grphw(EXT_MEM_CTL2, cfb->mem_ctl2, cfb); in cyberpro_common_resume()
1641 cyber2000fb_set_par(&cfb->fb); in cyberpro_common_resume()
1658 static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) in cyberpro_pci_enable_mmio() argument
1700 if (cfb->id == ID_CYBERPRO_2010) { in cyberpro_pci_enable_mmio()
1702 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1704 val = cyber2000_grphr(EXT_BUS_CTL, cfb); in cyberpro_pci_enable_mmio()
1707 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1711 if (cfb->id == ID_CYBERPRO_5000) in cyberpro_pci_enable_mmio()
1714 cyber2000_grphw(EXT_BUS_CTL, val, cfb); in cyberpro_pci_enable_mmio()
1724 struct cfb_info *cfb; in cyberpro_pci_probe() local
1735 cfb = cyberpro_alloc_fb_info(id->driver_data, name); in cyberpro_pci_probe()
1736 if (!cfb) in cyberpro_pci_probe()
1739 err = pci_request_regions(dev, cfb->fb.fix.id); in cyberpro_pci_probe()
1743 cfb->irq = dev->irq; in cyberpro_pci_probe()
1744 cfb->region = pci_ioremap_bar(dev, 0); in cyberpro_pci_probe()
1745 if (!cfb->region) { in cyberpro_pci_probe()
1750 cfb->regs = cfb->region + MMIO_OFFSET; in cyberpro_pci_probe()
1751 cfb->fb.device = &dev->dev; in cyberpro_pci_probe()
1752 cfb->fb.fix.mmio_start = pci_resource_start(dev, 0) + MMIO_OFFSET; in cyberpro_pci_probe()
1753 cfb->fb.fix.smem_start = pci_resource_start(dev, 0); in cyberpro_pci_probe()
1761 err = cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_probe()
1768 cfb->mclk_mult = cyber2000_grphr(EXT_MCLK_MULT, cfb); in cyberpro_pci_probe()
1769 cfb->mclk_div = cyber2000_grphr(EXT_MCLK_DIV, cfb); in cyberpro_pci_probe()
1776 cfb->mclk_mult = 0xdb; in cyberpro_pci_probe()
1777 cfb->mclk_div = 0x54; in cyberpro_pci_probe()
1781 err = cyberpro_common_probe(cfb); in cyberpro_pci_probe()
1788 pci_set_drvdata(dev, cfb); in cyberpro_pci_probe()
1790 int_cfb_info = cfb; in cyberpro_pci_probe()
1795 iounmap(cfb->region); in cyberpro_pci_probe()
1799 cyberpro_free_fb_info(cfb); in cyberpro_pci_probe()
1806 struct cfb_info *cfb = pci_get_drvdata(dev); in cyberpro_pci_remove() local
1808 if (cfb) { in cyberpro_pci_remove()
1809 cyberpro_common_remove(cfb); in cyberpro_pci_remove()
1810 iounmap(cfb->region); in cyberpro_pci_remove()
1811 cyberpro_free_fb_info(cfb); in cyberpro_pci_remove()
1813 if (cfb == int_cfb_info) in cyberpro_pci_remove()
1830 struct cfb_info *cfb = pci_get_drvdata(dev); in cyberpro_pci_resume() local
1832 if (cfb) { in cyberpro_pci_resume()
1833 cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_resume()
1834 cyberpro_common_resume(cfb); in cyberpro_pci_resume()