Lines Matching refs:cfb

109 #define cyber2000fb_writel(val, reg, cfb)	writel(val, (cfb)->regs + (reg))  argument
110 #define cyber2000fb_writew(val, reg, cfb) writew(val, (cfb)->regs + (reg)) argument
111 #define cyber2000fb_writeb(val, reg, cfb) writeb(val, (cfb)->regs + (reg)) argument
113 #define cyber2000fb_readb(reg, cfb) readb((cfb)->regs + (reg)) argument
116 cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_crtcw() argument
118 cyber2000fb_writew((reg & 255) | val << 8, 0x3d4, cfb); in cyber2000_crtcw()
122 cyber2000_grphw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_grphw() argument
124 cyber2000fb_writew((reg & 255) | val << 8, 0x3ce, cfb); in cyber2000_grphw()
128 cyber2000_grphr(unsigned int reg, struct cfb_info *cfb) in cyber2000_grphr() argument
130 cyber2000fb_writeb(reg, 0x3ce, cfb); in cyber2000_grphr()
131 return cyber2000fb_readb(0x3cf, cfb); in cyber2000_grphr()
135 cyber2000_attrw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_attrw() argument
137 cyber2000fb_readb(0x3da, cfb); in cyber2000_attrw()
138 cyber2000fb_writeb(reg, 0x3c0, cfb); in cyber2000_attrw()
139 cyber2000fb_readb(0x3c1, cfb); in cyber2000_attrw()
140 cyber2000fb_writeb(val, 0x3c0, cfb); in cyber2000_attrw()
144 cyber2000_seqw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_seqw() argument
146 cyber2000fb_writew((reg & 255) | val << 8, 0x3c4, cfb); in cyber2000_seqw()
157 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_fillrect() local
160 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_fillrect()
165 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_fillrect()
166 cyber2000fb_writew(rect->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_fillrect()
167 cyber2000fb_writew(rect->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_fillrect()
170 if (cfb->fb.var.bits_per_pixel > 8) in cyber2000fb_fillrect()
171 col = ((u32 *)cfb->fb.pseudo_palette)[col]; in cyber2000fb_fillrect()
172 cyber2000fb_writel(col, CO_REG_FGCOLOUR, cfb); in cyber2000fb_fillrect()
174 dst = rect->dx + rect->dy * cfb->fb.var.xres_virtual; in cyber2000fb_fillrect()
175 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_fillrect()
176 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_fillrect()
180 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_fillrect()
181 cyber2000fb_writeb(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_fillrect()
182 cyber2000fb_writew(CO_CMD_L_PATTERN_FGCOL, CO_REG_CMD_L, cfb); in cyber2000fb_fillrect()
183 cyber2000fb_writew(CO_CMD_H_BLITTER, CO_REG_CMD_H, cfb); in cyber2000fb_fillrect()
189 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_copyarea() local
193 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_copyarea()
198 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_copyarea()
199 cyber2000fb_writew(region->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_copyarea()
200 cyber2000fb_writew(region->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_copyarea()
202 src = region->sx + region->sy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
203 dst = region->dx + region->dy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
212 src += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
213 dst += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
217 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_copyarea()
218 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_copyarea()
222 cyber2000fb_writel(src, CO_REG_SRC1_PTR, cfb); in cyber2000fb_copyarea()
223 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_copyarea()
224 cyber2000fb_writew(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_copyarea()
225 cyber2000fb_writew(cmd, CO_REG_CMD_L, cfb); in cyber2000fb_copyarea()
227 CO_REG_CMD_H, cfb); in cyber2000fb_copyarea()
232 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_sync() local
235 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) in cyber2000fb_sync()
238 while (cyber2000fb_readb(CO_REG_CONTROL, cfb) & CO_CTRL_BUSY) { in cyber2000fb_sync()
241 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_sync()
267 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_setcolreg() local
268 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_setcolreg()
272 switch (cfb->fb.fix.visual) { in cyber2000fb_setcolreg()
293 cfb->palette[regno].red = red; in cyber2000fb_setcolreg()
294 cfb->palette[regno].green = green; in cyber2000fb_setcolreg()
295 cfb->palette[regno].blue = blue; in cyber2000fb_setcolreg()
297 cyber2000fb_writeb(regno, 0x3c8, cfb); in cyber2000fb_setcolreg()
298 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
299 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
300 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
319 cfb->palette[regno << 2].green = green; in cyber2000fb_setcolreg()
325 cyber2000fb_writeb(regno << 2, 0x3c8, cfb); in cyber2000fb_setcolreg()
326 cyber2000fb_writeb(cfb->palette[regno >> 1].red, in cyber2000fb_setcolreg()
327 0x3c9, cfb); in cyber2000fb_setcolreg()
328 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
329 cyber2000fb_writeb(cfb->palette[regno >> 1].blue, in cyber2000fb_setcolreg()
330 0x3c9, cfb); in cyber2000fb_setcolreg()
332 green = cfb->palette[regno << 3].green; in cyber2000fb_setcolreg()
338 cfb->palette[regno << 3].red = red; in cyber2000fb_setcolreg()
339 cfb->palette[regno << 3].green = green; in cyber2000fb_setcolreg()
340 cfb->palette[regno << 3].blue = blue; in cyber2000fb_setcolreg()
346 cyber2000fb_writeb(regno << 3, 0x3c8, cfb); in cyber2000fb_setcolreg()
347 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
348 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
349 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
354 cfb->palette[regno << 4].red = red; in cyber2000fb_setcolreg()
355 cfb->palette[regno << 4].green = green; in cyber2000fb_setcolreg()
356 cfb->palette[regno << 4].blue = blue; in cyber2000fb_setcolreg()
362 cyber2000fb_writeb(regno << 4, 0x3c8, cfb); in cyber2000fb_setcolreg()
363 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
364 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
365 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
401 ((u32 *)cfb->fb.pseudo_palette)[regno] = pseudo_val; in cyber2000fb_setcolreg()
432 static void cyber2000fb_write_ramdac_ctrl(struct cfb_info *cfb) in cyber2000fb_write_ramdac_ctrl() argument
435 unsigned int val = cfb->ramdac_ctrl | cfb->ramdac_powerdown; in cyber2000fb_write_ramdac_ctrl()
437 cyber2000fb_writeb(0x56, 0x3ce, cfb); in cyber2000fb_write_ramdac_ctrl()
438 i = cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
439 cyber2000fb_writeb(i | 4, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
440 cyber2000fb_writeb(val, 0x3c6, cfb); in cyber2000fb_write_ramdac_ctrl()
441 cyber2000fb_writeb(i, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
443 cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
446 static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw) in cyber2000fb_set_timing() argument
454 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_set_timing()
455 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
456 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
457 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
460 cyber2000fb_writeb(0xef, 0x3c2, cfb); in cyber2000fb_set_timing()
461 cyber2000_crtcw(0x11, 0x0b, cfb); in cyber2000fb_set_timing()
462 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
464 cyber2000_seqw(0x00, 0x01, cfb); in cyber2000fb_set_timing()
465 cyber2000_seqw(0x01, 0x01, cfb); in cyber2000fb_set_timing()
466 cyber2000_seqw(0x02, 0x0f, cfb); in cyber2000fb_set_timing()
467 cyber2000_seqw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
468 cyber2000_seqw(0x04, 0x0e, cfb); in cyber2000fb_set_timing()
469 cyber2000_seqw(0x00, 0x03, cfb); in cyber2000fb_set_timing()
472 cyber2000_crtcw(crtc_idx[i], hw->crtc[i], cfb); in cyber2000fb_set_timing()
475 cyber2000_crtcw(i, 0, cfb); in cyber2000fb_set_timing()
477 cyber2000_grphw(EXT_CRT_VRTOFL, hw->crtc_ofl, cfb); in cyber2000fb_set_timing()
478 cyber2000_grphw(0x00, 0x00, cfb); in cyber2000fb_set_timing()
479 cyber2000_grphw(0x01, 0x00, cfb); in cyber2000fb_set_timing()
480 cyber2000_grphw(0x02, 0x00, cfb); in cyber2000fb_set_timing()
481 cyber2000_grphw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
482 cyber2000_grphw(0x04, 0x00, cfb); in cyber2000fb_set_timing()
483 cyber2000_grphw(0x05, 0x60, cfb); in cyber2000fb_set_timing()
484 cyber2000_grphw(0x06, 0x05, cfb); in cyber2000fb_set_timing()
485 cyber2000_grphw(0x07, 0x0f, cfb); in cyber2000fb_set_timing()
486 cyber2000_grphw(0x08, 0xff, cfb); in cyber2000fb_set_timing()
490 cyber2000_attrw(i, i, cfb); in cyber2000fb_set_timing()
492 cyber2000_attrw(0x10, 0x01, cfb); in cyber2000fb_set_timing()
493 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
494 cyber2000_attrw(0x12, 0x0f, cfb); in cyber2000fb_set_timing()
495 cyber2000_attrw(0x13, 0x00, cfb); in cyber2000fb_set_timing()
496 cyber2000_attrw(0x14, 0x00, cfb); in cyber2000fb_set_timing()
499 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
500 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); in cyber2000fb_set_timing()
501 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); in cyber2000fb_set_timing()
502 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); in cyber2000fb_set_timing()
503 cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb); in cyber2000fb_set_timing()
504 cyber2000_grphw(0x90, 0x01, cfb); in cyber2000fb_set_timing()
505 cyber2000_grphw(0xb9, 0x80, cfb); in cyber2000fb_set_timing()
506 cyber2000_grphw(0xb9, 0x00, cfb); in cyber2000fb_set_timing()
507 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
509 cfb->ramdac_ctrl = hw->ramdac; in cyber2000fb_set_timing()
510 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_set_timing()
512 cyber2000fb_writeb(0x20, 0x3c0, cfb); in cyber2000fb_set_timing()
513 cyber2000fb_writeb(0xff, 0x3c6, cfb); in cyber2000fb_set_timing()
515 cyber2000_grphw(0x14, hw->fetch, cfb); in cyber2000fb_set_timing()
517 ((hw->pitch >> 4) & 0x30), cfb); in cyber2000fb_set_timing()
518 cyber2000_grphw(EXT_SEQ_MISC, hw->extseqmisc, cfb); in cyber2000fb_set_timing()
523 cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb); in cyber2000fb_set_timing()
524 cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb); in cyber2000fb_set_timing()
525 cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb); in cyber2000fb_set_timing()
529 cyber2000fb_update_start(struct cfb_info *cfb, struct fb_var_screeninfo *var) in cyber2000fb_update_start() argument
544 cyber2000_grphw(0x10, base >> 16 | 0x10, cfb); in cyber2000fb_update_start()
545 cyber2000_crtcw(0x0c, base >> 8, cfb); in cyber2000fb_update_start()
546 cyber2000_crtcw(0x0d, base, cfb); in cyber2000fb_update_start()
552 cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_crtc() argument
653 cyber2000fb_decode_clock(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_clock() argument
657 const u_long ref_ps = cfb->ref_ps; in cyber2000fb_decode_clock()
670 new_pll = pll_ps / cfb->divisors[div2]; in cyber2000fb_decode_clock()
749 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_check_var() local
830 if (mem > cfb->fb.fix.smem_len) in cyber2000fb_check_var()
831 var->yres_virtual = cfb->fb.fix.smem_len * 8 / in cyber2000fb_check_var()
839 err = cyber2000fb_decode_clock(&hw, cfb, var); in cyber2000fb_check_var()
843 err = cyber2000fb_decode_crtc(&hw, cfb, var); in cyber2000fb_check_var()
852 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_set_par() local
853 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_set_par()
916 BUG_ON(cyber2000fb_decode_clock(&hw, cfb, var) != 0); in cyber2000fb_set_par()
917 BUG_ON(cyber2000fb_decode_crtc(&hw, cfb, var) != 0); in cyber2000fb_set_par()
921 if (!(cfb->mem_ctl2 & MEM_CTL2_64BIT)) in cyber2000fb_set_par()
925 cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; in cyber2000fb_set_par()
934 mem = cfb->fb.fix.line_length * var->yres_virtual; in cyber2000fb_set_par()
935 BUG_ON(mem > cfb->fb.fix.smem_len); in cyber2000fb_set_par()
944 cfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; in cyber2000fb_set_par()
946 cfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; in cyber2000fb_set_par()
948 cfb->fb.fix.visual = FB_VISUAL_DIRECTCOLOR; in cyber2000fb_set_par()
950 cyber2000fb_set_timing(cfb, &hw); in cyber2000fb_set_par()
951 cyber2000fb_update_start(cfb, var); in cyber2000fb_set_par()
962 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_pan_display() local
964 if (cyber2000fb_update_start(cfb, var)) in cyber2000fb_pan_display()
967 cfb->fb.var.xoffset = var->xoffset; in cyber2000fb_pan_display()
968 cfb->fb.var.yoffset = var->yoffset; in cyber2000fb_pan_display()
971 cfb->fb.var.vmode |= FB_VMODE_YWRAP; in cyber2000fb_pan_display()
973 cfb->fb.var.vmode &= ~FB_VMODE_YWRAP; in cyber2000fb_pan_display()
998 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_blank() local
1017 cyber2000_grphw(EXT_SYNC_CTL, sync, cfb); in cyber2000fb_blank()
1021 cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1023 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1031 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1032 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1033 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1034 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1038 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1039 cyber2000fb_writeb(cfb->palette[i].red, 0x3c9, cfb); in cyber2000fb_blank()
1040 cyber2000fb_writeb(cfb->palette[i].green, 0x3c9, cfb); in cyber2000fb_blank()
1041 cyber2000fb_writeb(cfb->palette[i].blue, 0x3c9, cfb); in cyber2000fb_blank()
1047 cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1049 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1080 void cyber2000fb_enable_extregs(struct cfb_info *cfb) in cyber2000fb_enable_extregs() argument
1082 cfb->func_use_count += 1; in cyber2000fb_enable_extregs()
1084 if (cfb->func_use_count == 1) { in cyber2000fb_enable_extregs()
1087 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_enable_extregs()
1089 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_enable_extregs()
1096 void cyber2000fb_disable_extregs(struct cfb_info *cfb) in cyber2000fb_disable_extregs() argument
1098 if (cfb->func_use_count == 1) { in cyber2000fb_disable_extregs()
1101 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_disable_extregs()
1103 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_disable_extregs()
1106 if (cfb->func_use_count == 0) in cyber2000fb_disable_extregs()
1109 cfb->func_use_count -= 1; in cyber2000fb_disable_extregs()
1120 static void cyber2000fb_enable_ddc(struct cfb_info *cfb) in cyber2000fb_enable_ddc() argument
1121 __acquires(&cfb->reg_b0_lock) in cyber2000fb_enable_ddc()
1123 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_enable_ddc()
1124 cyber2000fb_writew(0x1bf, 0x3ce, cfb); in cyber2000fb_enable_ddc()
1127 static void cyber2000fb_disable_ddc(struct cfb_info *cfb) in cyber2000fb_disable_ddc() argument
1128 __releases(&cfb->reg_b0_lock) in cyber2000fb_disable_ddc()
1130 cyber2000fb_writew(0x0bf, 0x3ce, cfb); in cyber2000fb_disable_ddc()
1131 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_disable_ddc()
1137 struct cfb_info *cfb = data; in cyber2000fb_ddc_setscl() local
1140 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setscl()
1141 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setscl()
1146 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setscl()
1147 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setscl()
1152 struct cfb_info *cfb = data; in cyber2000fb_ddc_setsda() local
1155 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setsda()
1156 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setsda()
1161 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setsda()
1162 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setsda()
1167 struct cfb_info *cfb = data; in cyber2000fb_ddc_getscl() local
1170 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getscl()
1171 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SCL_IN); in cyber2000fb_ddc_getscl()
1172 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getscl()
1179 struct cfb_info *cfb = data; in cyber2000fb_ddc_getsda() local
1182 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getsda()
1183 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SDA_IN); in cyber2000fb_ddc_getsda()
1184 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getsda()
1189 static int cyber2000fb_setup_ddc_bus(struct cfb_info *cfb) in cyber2000fb_setup_ddc_bus() argument
1191 strscpy(cfb->ddc_adapter.name, cfb->fb.fix.id, in cyber2000fb_setup_ddc_bus()
1192 sizeof(cfb->ddc_adapter.name)); in cyber2000fb_setup_ddc_bus()
1193 cfb->ddc_adapter.owner = THIS_MODULE; in cyber2000fb_setup_ddc_bus()
1194 cfb->ddc_adapter.algo_data = &cfb->ddc_algo; in cyber2000fb_setup_ddc_bus()
1195 cfb->ddc_adapter.dev.parent = cfb->fb.device; in cyber2000fb_setup_ddc_bus()
1196 cfb->ddc_algo.setsda = cyber2000fb_ddc_setsda; in cyber2000fb_setup_ddc_bus()
1197 cfb->ddc_algo.setscl = cyber2000fb_ddc_setscl; in cyber2000fb_setup_ddc_bus()
1198 cfb->ddc_algo.getsda = cyber2000fb_ddc_getsda; in cyber2000fb_setup_ddc_bus()
1199 cfb->ddc_algo.getscl = cyber2000fb_ddc_getscl; in cyber2000fb_setup_ddc_bus()
1200 cfb->ddc_algo.udelay = 10; in cyber2000fb_setup_ddc_bus()
1201 cfb->ddc_algo.timeout = 20; in cyber2000fb_setup_ddc_bus()
1202 cfb->ddc_algo.data = cfb; in cyber2000fb_setup_ddc_bus()
1204 i2c_set_adapdata(&cfb->ddc_adapter, cfb); in cyber2000fb_setup_ddc_bus()
1206 return i2c_bit_add_bus(&cfb->ddc_adapter); in cyber2000fb_setup_ddc_bus()
1213 struct cfb_info *cfb = data; in cyber2000fb_i2c_setsda() local
1216 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1217 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setsda()
1221 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setsda()
1222 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1227 struct cfb_info *cfb = data; in cyber2000fb_i2c_setscl() local
1230 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1231 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setscl()
1235 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setscl()
1236 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1241 struct cfb_info *cfb = data; in cyber2000fb_i2c_getsda() local
1244 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1245 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_DAT); in cyber2000fb_i2c_getsda()
1246 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1253 struct cfb_info *cfb = data; in cyber2000fb_i2c_getscl() local
1256 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1257 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_CLK); in cyber2000fb_i2c_getscl()
1258 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1263 static int cyber2000fb_i2c_register(struct cfb_info *cfb) in cyber2000fb_i2c_register() argument
1265 strscpy(cfb->i2c_adapter.name, cfb->fb.fix.id, in cyber2000fb_i2c_register()
1266 sizeof(cfb->i2c_adapter.name)); in cyber2000fb_i2c_register()
1267 cfb->i2c_adapter.owner = THIS_MODULE; in cyber2000fb_i2c_register()
1268 cfb->i2c_adapter.algo_data = &cfb->i2c_algo; in cyber2000fb_i2c_register()
1269 cfb->i2c_adapter.dev.parent = cfb->fb.device; in cyber2000fb_i2c_register()
1270 cfb->i2c_algo.setsda = cyber2000fb_i2c_setsda; in cyber2000fb_i2c_register()
1271 cfb->i2c_algo.setscl = cyber2000fb_i2c_setscl; in cyber2000fb_i2c_register()
1272 cfb->i2c_algo.getsda = cyber2000fb_i2c_getsda; in cyber2000fb_i2c_register()
1273 cfb->i2c_algo.getscl = cyber2000fb_i2c_getscl; in cyber2000fb_i2c_register()
1274 cfb->i2c_algo.udelay = 5; in cyber2000fb_i2c_register()
1275 cfb->i2c_algo.timeout = msecs_to_jiffies(100); in cyber2000fb_i2c_register()
1276 cfb->i2c_algo.data = cfb; in cyber2000fb_i2c_register()
1278 return i2c_bit_add_bus(&cfb->i2c_adapter); in cyber2000fb_i2c_register()
1281 static void cyber2000fb_i2c_unregister(struct cfb_info *cfb) in cyber2000fb_i2c_unregister() argument
1283 i2c_del_adapter(&cfb->i2c_adapter); in cyber2000fb_i2c_unregister()
1286 #define cyber2000fb_i2c_register(cfb) (0) argument
1287 #define cyber2000fb_i2c_unregister(cfb) do { } while (0) argument
1347 static void cyberpro_init_hw(struct cfb_info *cfb) in cyberpro_init_hw() argument
1352 cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb); in cyberpro_init_hw()
1354 if (cfb->id == ID_CYBERPRO_5000) { in cyberpro_init_hw()
1356 cyber2000fb_writeb(0xba, 0x3ce, cfb); in cyberpro_init_hw()
1357 val = cyber2000fb_readb(0x3cf, cfb) & 0x80; in cyberpro_init_hw()
1358 cyber2000fb_writeb(val, 0x3cf, cfb); in cyberpro_init_hw()
1364 struct cfb_info *cfb; in cyberpro_alloc_fb_info() local
1366 cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL); in cyberpro_alloc_fb_info()
1367 if (!cfb) in cyberpro_alloc_fb_info()
1371 cfb->id = id; in cyberpro_alloc_fb_info()
1374 cfb->ref_ps = 40690; /* 24.576 MHz */ in cyberpro_alloc_fb_info()
1376 cfb->ref_ps = 69842; /* 14.31818 MHz (69841?) */ in cyberpro_alloc_fb_info()
1378 cfb->divisors[0] = 1; in cyberpro_alloc_fb_info()
1379 cfb->divisors[1] = 2; in cyberpro_alloc_fb_info()
1380 cfb->divisors[2] = 4; in cyberpro_alloc_fb_info()
1383 cfb->divisors[3] = 8; in cyberpro_alloc_fb_info()
1385 cfb->divisors[3] = 6; in cyberpro_alloc_fb_info()
1387 strcpy(cfb->fb.fix.id, name); in cyberpro_alloc_fb_info()
1389 cfb->fb.fix.type = FB_TYPE_PACKED_PIXELS; in cyberpro_alloc_fb_info()
1390 cfb->fb.fix.type_aux = 0; in cyberpro_alloc_fb_info()
1391 cfb->fb.fix.xpanstep = 0; in cyberpro_alloc_fb_info()
1392 cfb->fb.fix.ypanstep = 1; in cyberpro_alloc_fb_info()
1393 cfb->fb.fix.ywrapstep = 0; in cyberpro_alloc_fb_info()
1397 cfb->fb.fix.accel = 0; in cyberpro_alloc_fb_info()
1401 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2000; in cyberpro_alloc_fb_info()
1405 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2010; in cyberpro_alloc_fb_info()
1409 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER5000; in cyberpro_alloc_fb_info()
1413 cfb->fb.var.nonstd = 0; in cyberpro_alloc_fb_info()
1414 cfb->fb.var.activate = FB_ACTIVATE_NOW; in cyberpro_alloc_fb_info()
1415 cfb->fb.var.height = -1; in cyberpro_alloc_fb_info()
1416 cfb->fb.var.width = -1; in cyberpro_alloc_fb_info()
1417 cfb->fb.var.accel_flags = FB_ACCELF_TEXT; in cyberpro_alloc_fb_info()
1419 cfb->fb.fbops = &cyber2000fb_ops; in cyberpro_alloc_fb_info()
1420 cfb->fb.flags = FBINFO_HWACCEL_YPAN; in cyberpro_alloc_fb_info()
1421 cfb->fb.pseudo_palette = cfb->pseudo_palette; in cyberpro_alloc_fb_info()
1423 spin_lock_init(&cfb->reg_b0_lock); in cyberpro_alloc_fb_info()
1425 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0); in cyberpro_alloc_fb_info()
1427 return cfb; in cyberpro_alloc_fb_info()
1430 static void cyberpro_free_fb_info(struct cfb_info *cfb) in cyberpro_free_fb_info() argument
1432 if (cfb) { in cyberpro_free_fb_info()
1436 fb_alloc_cmap(&cfb->fb.cmap, 0, 0); in cyberpro_free_fb_info()
1438 kfree(cfb); in cyberpro_free_fb_info()
1481 static int cyberpro_common_probe(struct cfb_info *cfb) in cyberpro_common_probe() argument
1487 cyberpro_init_hw(cfb); in cyberpro_common_probe()
1494 cfb->mem_ctl1 = cyber2000_grphr(EXT_MEM_CTL1, cfb); in cyberpro_common_probe()
1495 cfb->mem_ctl2 = cyber2000_grphr(EXT_MEM_CTL2, cfb); in cyberpro_common_probe()
1500 switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) { in cyberpro_common_probe()
1515 cfb->fb.fix.smem_len = smem_size; in cyberpro_common_probe()
1516 cfb->fb.fix.mmio_len = MMIO_SIZE; in cyberpro_common_probe()
1517 cfb->fb.screen_base = cfb->region; in cyberpro_common_probe()
1520 if (cyber2000fb_setup_ddc_bus(cfb) == 0) in cyberpro_common_probe()
1521 cfb->ddc_registered = true; in cyberpro_common_probe()
1525 if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0, in cyberpro_common_probe()
1527 printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id); in cyberpro_common_probe()
1531 cfb->fb.var.yres_virtual = cfb->fb.fix.smem_len * 8 / in cyberpro_common_probe()
1532 (cfb->fb.var.bits_per_pixel * cfb->fb.var.xres_virtual); in cyberpro_common_probe()
1534 if (cfb->fb.var.yres_virtual < cfb->fb.var.yres) in cyberpro_common_probe()
1535 cfb->fb.var.yres_virtual = cfb->fb.var.yres; in cyberpro_common_probe()
1545 h_sync = 1953125000 / cfb->fb.var.pixclock; in cyberpro_common_probe()
1546 h_sync = h_sync * 512 / (cfb->fb.var.xres + cfb->fb.var.left_margin + in cyberpro_common_probe()
1547 cfb->fb.var.right_margin + cfb->fb.var.hsync_len); in cyberpro_common_probe()
1548 v_sync = h_sync / (cfb->fb.var.yres + cfb->fb.var.upper_margin + in cyberpro_common_probe()
1549 cfb->fb.var.lower_margin + cfb->fb.var.vsync_len); in cyberpro_common_probe()
1552 cfb->fb.fix.id, cfb->fb.fix.smem_len >> 10, in cyberpro_common_probe()
1553 cfb->fb.var.xres, cfb->fb.var.yres, in cyberpro_common_probe()
1556 err = cyber2000fb_i2c_register(cfb); in cyberpro_common_probe()
1560 err = register_framebuffer(&cfb->fb); in cyberpro_common_probe()
1562 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_probe()
1566 if (err && cfb->ddc_registered) in cyberpro_common_probe()
1567 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_probe()
1572 static void cyberpro_common_remove(struct cfb_info *cfb) in cyberpro_common_remove() argument
1574 unregister_framebuffer(&cfb->fb); in cyberpro_common_remove()
1576 if (cfb->ddc_registered) in cyberpro_common_remove()
1577 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_remove()
1579 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_remove()
1582 static void cyberpro_common_resume(struct cfb_info *cfb) in cyberpro_common_resume() argument
1584 cyberpro_init_hw(cfb); in cyberpro_common_resume()
1589 cyber2000_grphw(EXT_MEM_CTL1, cfb->mem_ctl1, cfb); in cyberpro_common_resume()
1590 cyber2000_grphw(EXT_MEM_CTL2, cfb->mem_ctl2, cfb); in cyberpro_common_resume()
1596 cyber2000fb_set_par(&cfb->fb); in cyberpro_common_resume()
1609 static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) in cyberpro_pci_enable_mmio() argument
1651 if (cfb->id == ID_CYBERPRO_2010) { in cyberpro_pci_enable_mmio()
1653 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1655 val = cyber2000_grphr(EXT_BUS_CTL, cfb); in cyberpro_pci_enable_mmio()
1658 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1662 if (cfb->id == ID_CYBERPRO_5000) in cyberpro_pci_enable_mmio()
1665 cyber2000_grphw(EXT_BUS_CTL, val, cfb); in cyberpro_pci_enable_mmio()
1675 struct cfb_info *cfb; in cyberpro_pci_probe() local
1690 cfb = cyberpro_alloc_fb_info(id->driver_data, name); in cyberpro_pci_probe()
1691 if (!cfb) in cyberpro_pci_probe()
1694 err = pci_request_regions(dev, cfb->fb.fix.id); in cyberpro_pci_probe()
1698 cfb->irq = dev->irq; in cyberpro_pci_probe()
1699 cfb->region = pci_ioremap_bar(dev, 0); in cyberpro_pci_probe()
1700 if (!cfb->region) { in cyberpro_pci_probe()
1705 cfb->regs = cfb->region + MMIO_OFFSET; in cyberpro_pci_probe()
1706 cfb->fb.device = &dev->dev; in cyberpro_pci_probe()
1707 cfb->fb.fix.mmio_start = pci_resource_start(dev, 0) + MMIO_OFFSET; in cyberpro_pci_probe()
1708 cfb->fb.fix.smem_start = pci_resource_start(dev, 0); in cyberpro_pci_probe()
1716 err = cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_probe()
1723 cfb->mclk_mult = cyber2000_grphr(EXT_MCLK_MULT, cfb); in cyberpro_pci_probe()
1724 cfb->mclk_div = cyber2000_grphr(EXT_MCLK_DIV, cfb); in cyberpro_pci_probe()
1731 cfb->mclk_mult = 0xdb; in cyberpro_pci_probe()
1732 cfb->mclk_div = 0x54; in cyberpro_pci_probe()
1736 err = cyberpro_common_probe(cfb); in cyberpro_pci_probe()
1743 pci_set_drvdata(dev, cfb); in cyberpro_pci_probe()
1745 int_cfb_info = cfb; in cyberpro_pci_probe()
1750 iounmap(cfb->region); in cyberpro_pci_probe()
1754 cyberpro_free_fb_info(cfb); in cyberpro_pci_probe()
1762 struct cfb_info *cfb = pci_get_drvdata(dev); in cyberpro_pci_remove() local
1764 if (cfb) { in cyberpro_pci_remove()
1765 cyberpro_common_remove(cfb); in cyberpro_pci_remove()
1766 iounmap(cfb->region); in cyberpro_pci_remove()
1767 cyberpro_free_fb_info(cfb); in cyberpro_pci_remove()
1769 if (cfb == int_cfb_info) in cyberpro_pci_remove()
1787 struct cfb_info *cfb = dev_get_drvdata(dev); in cyberpro_pci_resume() local
1789 if (cfb) { in cyberpro_pci_resume()
1790 cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_resume()
1791 cyberpro_common_resume(cfb); in cyberpro_pci_resume()