Lines Matching refs:cfb

110 #define cyber2000fb_writel(val, reg, cfb)	writel(val, (cfb)->regs + (reg))  argument
111 #define cyber2000fb_writew(val, reg, cfb) writew(val, (cfb)->regs + (reg)) argument
112 #define cyber2000fb_writeb(val, reg, cfb) writeb(val, (cfb)->regs + (reg)) argument
114 #define cyber2000fb_readb(reg, cfb) readb((cfb)->regs + (reg)) argument
117 cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_crtcw() argument
119 cyber2000fb_writew((reg & 255) | val << 8, 0x3d4, cfb); in cyber2000_crtcw()
123 cyber2000_grphw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_grphw() argument
125 cyber2000fb_writew((reg & 255) | val << 8, 0x3ce, cfb); in cyber2000_grphw()
129 cyber2000_grphr(unsigned int reg, struct cfb_info *cfb) in cyber2000_grphr() argument
131 cyber2000fb_writeb(reg, 0x3ce, cfb); in cyber2000_grphr()
132 return cyber2000fb_readb(0x3cf, cfb); in cyber2000_grphr()
136 cyber2000_attrw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_attrw() argument
138 cyber2000fb_readb(0x3da, cfb); in cyber2000_attrw()
139 cyber2000fb_writeb(reg, 0x3c0, cfb); in cyber2000_attrw()
140 cyber2000fb_readb(0x3c1, cfb); in cyber2000_attrw()
141 cyber2000fb_writeb(val, 0x3c0, cfb); in cyber2000_attrw()
145 cyber2000_seqw(unsigned int reg, unsigned int val, struct cfb_info *cfb) in cyber2000_seqw() argument
147 cyber2000fb_writew((reg & 255) | val << 8, 0x3c4, cfb); in cyber2000_seqw()
158 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_fillrect() local
161 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_fillrect()
166 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_fillrect()
167 cyber2000fb_writew(rect->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_fillrect()
168 cyber2000fb_writew(rect->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_fillrect()
171 if (cfb->fb.var.bits_per_pixel > 8) in cyber2000fb_fillrect()
172 col = ((u32 *)cfb->fb.pseudo_palette)[col]; in cyber2000fb_fillrect()
173 cyber2000fb_writel(col, CO_REG_FGCOLOUR, cfb); in cyber2000fb_fillrect()
175 dst = rect->dx + rect->dy * cfb->fb.var.xres_virtual; in cyber2000fb_fillrect()
176 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_fillrect()
177 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_fillrect()
181 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_fillrect()
182 cyber2000fb_writeb(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_fillrect()
183 cyber2000fb_writew(CO_CMD_L_PATTERN_FGCOL, CO_REG_CMD_L, cfb); in cyber2000fb_fillrect()
184 cyber2000fb_writew(CO_CMD_H_BLITTER, CO_REG_CMD_H, cfb); in cyber2000fb_fillrect()
190 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_copyarea() local
194 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) { in cyber2000fb_copyarea()
199 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_copyarea()
200 cyber2000fb_writew(region->width - 1, CO_REG_PIXWIDTH, cfb); in cyber2000fb_copyarea()
201 cyber2000fb_writew(region->height - 1, CO_REG_PIXHEIGHT, cfb); in cyber2000fb_copyarea()
203 src = region->sx + region->sy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
204 dst = region->dx + region->dy * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
213 src += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
214 dst += (region->height - 1) * cfb->fb.var.xres_virtual; in cyber2000fb_copyarea()
218 if (cfb->fb.var.bits_per_pixel == 24) { in cyber2000fb_copyarea()
219 cyber2000fb_writeb(dst, CO_REG_X_PHASE, cfb); in cyber2000fb_copyarea()
223 cyber2000fb_writel(src, CO_REG_SRC1_PTR, cfb); in cyber2000fb_copyarea()
224 cyber2000fb_writel(dst, CO_REG_DEST_PTR, cfb); in cyber2000fb_copyarea()
225 cyber2000fb_writew(CO_FG_MIX_SRC, CO_REG_FGMIX, cfb); in cyber2000fb_copyarea()
226 cyber2000fb_writew(cmd, CO_REG_CMD_L, cfb); in cyber2000fb_copyarea()
228 CO_REG_CMD_H, cfb); in cyber2000fb_copyarea()
240 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_sync() local
243 if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) in cyber2000fb_sync()
246 while (cyber2000fb_readb(CO_REG_CONTROL, cfb) & CO_CTRL_BUSY) { in cyber2000fb_sync()
249 cyber2000fb_writeb(0, CO_REG_CONTROL, cfb); in cyber2000fb_sync()
275 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_setcolreg() local
276 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_setcolreg()
280 switch (cfb->fb.fix.visual) { in cyber2000fb_setcolreg()
301 cfb->palette[regno].red = red; in cyber2000fb_setcolreg()
302 cfb->palette[regno].green = green; in cyber2000fb_setcolreg()
303 cfb->palette[regno].blue = blue; in cyber2000fb_setcolreg()
305 cyber2000fb_writeb(regno, 0x3c8, cfb); in cyber2000fb_setcolreg()
306 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
307 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
308 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
327 cfb->palette[regno << 2].green = green; in cyber2000fb_setcolreg()
333 cyber2000fb_writeb(regno << 2, 0x3c8, cfb); in cyber2000fb_setcolreg()
334 cyber2000fb_writeb(cfb->palette[regno >> 1].red, in cyber2000fb_setcolreg()
335 0x3c9, cfb); in cyber2000fb_setcolreg()
336 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
337 cyber2000fb_writeb(cfb->palette[regno >> 1].blue, in cyber2000fb_setcolreg()
338 0x3c9, cfb); in cyber2000fb_setcolreg()
340 green = cfb->palette[regno << 3].green; in cyber2000fb_setcolreg()
346 cfb->palette[regno << 3].red = red; in cyber2000fb_setcolreg()
347 cfb->palette[regno << 3].green = green; in cyber2000fb_setcolreg()
348 cfb->palette[regno << 3].blue = blue; in cyber2000fb_setcolreg()
354 cyber2000fb_writeb(regno << 3, 0x3c8, cfb); in cyber2000fb_setcolreg()
355 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
356 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
357 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
362 cfb->palette[regno << 4].red = red; in cyber2000fb_setcolreg()
363 cfb->palette[regno << 4].green = green; in cyber2000fb_setcolreg()
364 cfb->palette[regno << 4].blue = blue; in cyber2000fb_setcolreg()
370 cyber2000fb_writeb(regno << 4, 0x3c8, cfb); in cyber2000fb_setcolreg()
371 cyber2000fb_writeb(red, 0x3c9, cfb); in cyber2000fb_setcolreg()
372 cyber2000fb_writeb(green, 0x3c9, cfb); in cyber2000fb_setcolreg()
373 cyber2000fb_writeb(blue, 0x3c9, cfb); in cyber2000fb_setcolreg()
409 ((u32 *)cfb->fb.pseudo_palette)[regno] = pseudo_val; in cyber2000fb_setcolreg()
440 static void cyber2000fb_write_ramdac_ctrl(struct cfb_info *cfb) in cyber2000fb_write_ramdac_ctrl() argument
443 unsigned int val = cfb->ramdac_ctrl | cfb->ramdac_powerdown; in cyber2000fb_write_ramdac_ctrl()
445 cyber2000fb_writeb(0x56, 0x3ce, cfb); in cyber2000fb_write_ramdac_ctrl()
446 i = cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
447 cyber2000fb_writeb(i | 4, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
448 cyber2000fb_writeb(val, 0x3c6, cfb); in cyber2000fb_write_ramdac_ctrl()
449 cyber2000fb_writeb(i, 0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
451 cyber2000fb_readb(0x3cf, cfb); in cyber2000fb_write_ramdac_ctrl()
454 static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw) in cyber2000fb_set_timing() argument
462 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_set_timing()
463 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
464 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
465 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_set_timing()
468 cyber2000fb_writeb(0xef, 0x3c2, cfb); in cyber2000fb_set_timing()
469 cyber2000_crtcw(0x11, 0x0b, cfb); in cyber2000fb_set_timing()
470 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
472 cyber2000_seqw(0x00, 0x01, cfb); in cyber2000fb_set_timing()
473 cyber2000_seqw(0x01, 0x01, cfb); in cyber2000fb_set_timing()
474 cyber2000_seqw(0x02, 0x0f, cfb); in cyber2000fb_set_timing()
475 cyber2000_seqw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
476 cyber2000_seqw(0x04, 0x0e, cfb); in cyber2000fb_set_timing()
477 cyber2000_seqw(0x00, 0x03, cfb); in cyber2000fb_set_timing()
480 cyber2000_crtcw(crtc_idx[i], hw->crtc[i], cfb); in cyber2000fb_set_timing()
483 cyber2000_crtcw(i, 0, cfb); in cyber2000fb_set_timing()
485 cyber2000_grphw(EXT_CRT_VRTOFL, hw->crtc_ofl, cfb); in cyber2000fb_set_timing()
486 cyber2000_grphw(0x00, 0x00, cfb); in cyber2000fb_set_timing()
487 cyber2000_grphw(0x01, 0x00, cfb); in cyber2000fb_set_timing()
488 cyber2000_grphw(0x02, 0x00, cfb); in cyber2000fb_set_timing()
489 cyber2000_grphw(0x03, 0x00, cfb); in cyber2000fb_set_timing()
490 cyber2000_grphw(0x04, 0x00, cfb); in cyber2000fb_set_timing()
491 cyber2000_grphw(0x05, 0x60, cfb); in cyber2000fb_set_timing()
492 cyber2000_grphw(0x06, 0x05, cfb); in cyber2000fb_set_timing()
493 cyber2000_grphw(0x07, 0x0f, cfb); in cyber2000fb_set_timing()
494 cyber2000_grphw(0x08, 0xff, cfb); in cyber2000fb_set_timing()
498 cyber2000_attrw(i, i, cfb); in cyber2000fb_set_timing()
500 cyber2000_attrw(0x10, 0x01, cfb); in cyber2000fb_set_timing()
501 cyber2000_attrw(0x11, 0x00, cfb); in cyber2000fb_set_timing()
502 cyber2000_attrw(0x12, 0x0f, cfb); in cyber2000fb_set_timing()
503 cyber2000_attrw(0x13, 0x00, cfb); in cyber2000fb_set_timing()
504 cyber2000_attrw(0x14, 0x00, cfb); in cyber2000fb_set_timing()
507 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
508 cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb); in cyber2000fb_set_timing()
509 cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb); in cyber2000fb_set_timing()
510 cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb); in cyber2000fb_set_timing()
511 cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb); in cyber2000fb_set_timing()
512 cyber2000_grphw(0x90, 0x01, cfb); in cyber2000fb_set_timing()
513 cyber2000_grphw(0xb9, 0x80, cfb); in cyber2000fb_set_timing()
514 cyber2000_grphw(0xb9, 0x00, cfb); in cyber2000fb_set_timing()
515 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_set_timing()
517 cfb->ramdac_ctrl = hw->ramdac; in cyber2000fb_set_timing()
518 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_set_timing()
520 cyber2000fb_writeb(0x20, 0x3c0, cfb); in cyber2000fb_set_timing()
521 cyber2000fb_writeb(0xff, 0x3c6, cfb); in cyber2000fb_set_timing()
523 cyber2000_grphw(0x14, hw->fetch, cfb); in cyber2000fb_set_timing()
525 ((hw->pitch >> 4) & 0x30), cfb); in cyber2000fb_set_timing()
526 cyber2000_grphw(EXT_SEQ_MISC, hw->extseqmisc, cfb); in cyber2000fb_set_timing()
531 cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb); in cyber2000fb_set_timing()
532 cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb); in cyber2000fb_set_timing()
533 cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb); in cyber2000fb_set_timing()
537 cyber2000fb_update_start(struct cfb_info *cfb, struct fb_var_screeninfo *var) in cyber2000fb_update_start() argument
552 cyber2000_grphw(0x10, base >> 16 | 0x10, cfb); in cyber2000fb_update_start()
553 cyber2000_crtcw(0x0c, base >> 8, cfb); in cyber2000fb_update_start()
554 cyber2000_crtcw(0x0d, base, cfb); in cyber2000fb_update_start()
560 cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_crtc() argument
661 cyber2000fb_decode_clock(struct par_info *hw, struct cfb_info *cfb, in cyber2000fb_decode_clock() argument
665 const u_long ref_ps = cfb->ref_ps; in cyber2000fb_decode_clock()
678 new_pll = pll_ps / cfb->divisors[div2]; in cyber2000fb_decode_clock()
757 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_check_var() local
838 if (mem > cfb->fb.fix.smem_len) in cyber2000fb_check_var()
839 var->yres_virtual = cfb->fb.fix.smem_len * 8 / in cyber2000fb_check_var()
847 err = cyber2000fb_decode_clock(&hw, cfb, var); in cyber2000fb_check_var()
851 err = cyber2000fb_decode_crtc(&hw, cfb, var); in cyber2000fb_check_var()
860 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_set_par() local
861 struct fb_var_screeninfo *var = &cfb->fb.var; in cyber2000fb_set_par()
924 BUG_ON(cyber2000fb_decode_clock(&hw, cfb, var) != 0); in cyber2000fb_set_par()
925 BUG_ON(cyber2000fb_decode_crtc(&hw, cfb, var) != 0); in cyber2000fb_set_par()
929 if (!(cfb->mem_ctl2 & MEM_CTL2_64BIT)) in cyber2000fb_set_par()
933 cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8; in cyber2000fb_set_par()
942 mem = cfb->fb.fix.line_length * var->yres_virtual; in cyber2000fb_set_par()
943 BUG_ON(mem > cfb->fb.fix.smem_len); in cyber2000fb_set_par()
952 cfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; in cyber2000fb_set_par()
954 cfb->fb.fix.visual = FB_VISUAL_TRUECOLOR; in cyber2000fb_set_par()
956 cfb->fb.fix.visual = FB_VISUAL_DIRECTCOLOR; in cyber2000fb_set_par()
958 cyber2000fb_set_timing(cfb, &hw); in cyber2000fb_set_par()
959 cyber2000fb_update_start(cfb, var); in cyber2000fb_set_par()
970 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_pan_display() local
972 if (cyber2000fb_update_start(cfb, var)) in cyber2000fb_pan_display()
975 cfb->fb.var.xoffset = var->xoffset; in cyber2000fb_pan_display()
976 cfb->fb.var.yoffset = var->yoffset; in cyber2000fb_pan_display()
979 cfb->fb.var.vmode |= FB_VMODE_YWRAP; in cyber2000fb_pan_display()
981 cfb->fb.var.vmode &= ~FB_VMODE_YWRAP; in cyber2000fb_pan_display()
1006 struct cfb_info *cfb = container_of(info, struct cfb_info, fb); in cyber2000fb_blank() local
1025 cyber2000_grphw(EXT_SYNC_CTL, sync, cfb); in cyber2000fb_blank()
1029 cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1031 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1039 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1040 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1041 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1042 cyber2000fb_writeb(0, 0x3c9, cfb); in cyber2000fb_blank()
1046 cyber2000fb_writeb(i, 0x3c8, cfb); in cyber2000fb_blank()
1047 cyber2000fb_writeb(cfb->palette[i].red, 0x3c9, cfb); in cyber2000fb_blank()
1048 cyber2000fb_writeb(cfb->palette[i].green, 0x3c9, cfb); in cyber2000fb_blank()
1049 cyber2000fb_writeb(cfb->palette[i].blue, 0x3c9, cfb); in cyber2000fb_blank()
1055 cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | in cyber2000fb_blank()
1057 cyber2000fb_write_ramdac_ctrl(cfb); in cyber2000fb_blank()
1086 void cyber2000fb_enable_extregs(struct cfb_info *cfb) in cyber2000fb_enable_extregs() argument
1088 cfb->func_use_count += 1; in cyber2000fb_enable_extregs()
1090 if (cfb->func_use_count == 1) { in cyber2000fb_enable_extregs()
1093 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_enable_extregs()
1095 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_enable_extregs()
1103 void cyber2000fb_disable_extregs(struct cfb_info *cfb) in cyber2000fb_disable_extregs() argument
1105 if (cfb->func_use_count == 1) { in cyber2000fb_disable_extregs()
1108 old = cyber2000_grphr(EXT_FUNC_CTL, cfb); in cyber2000fb_disable_extregs()
1110 cyber2000_grphw(EXT_FUNC_CTL, old, cfb); in cyber2000fb_disable_extregs()
1113 if (cfb->func_use_count == 0) in cyber2000fb_disable_extregs()
1116 cfb->func_use_count -= 1; in cyber2000fb_disable_extregs()
1162 static void cyber2000fb_enable_ddc(struct cfb_info *cfb) in cyber2000fb_enable_ddc() argument
1164 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_enable_ddc()
1165 cyber2000fb_writew(0x1bf, 0x3ce, cfb); in cyber2000fb_enable_ddc()
1168 static void cyber2000fb_disable_ddc(struct cfb_info *cfb) in cyber2000fb_disable_ddc() argument
1170 cyber2000fb_writew(0x0bf, 0x3ce, cfb); in cyber2000fb_disable_ddc()
1171 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_disable_ddc()
1177 struct cfb_info *cfb = data; in cyber2000fb_ddc_setscl() local
1180 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setscl()
1181 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setscl()
1186 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setscl()
1187 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setscl()
1192 struct cfb_info *cfb = data; in cyber2000fb_ddc_setsda() local
1195 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_setsda()
1196 reg = cyber2000_grphr(DDC_REG, cfb); in cyber2000fb_ddc_setsda()
1201 cyber2000_grphw(DDC_REG, reg, cfb); in cyber2000fb_ddc_setsda()
1202 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_setsda()
1207 struct cfb_info *cfb = data; in cyber2000fb_ddc_getscl() local
1210 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getscl()
1211 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SCL_IN); in cyber2000fb_ddc_getscl()
1212 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getscl()
1219 struct cfb_info *cfb = data; in cyber2000fb_ddc_getsda() local
1222 cyber2000fb_enable_ddc(cfb); in cyber2000fb_ddc_getsda()
1223 retval = !!(cyber2000_grphr(DDC_REG, cfb) & DDC_SDA_IN); in cyber2000fb_ddc_getsda()
1224 cyber2000fb_disable_ddc(cfb); in cyber2000fb_ddc_getsda()
1229 static int cyber2000fb_setup_ddc_bus(struct cfb_info *cfb) in cyber2000fb_setup_ddc_bus() argument
1231 strlcpy(cfb->ddc_adapter.name, cfb->fb.fix.id, in cyber2000fb_setup_ddc_bus()
1232 sizeof(cfb->ddc_adapter.name)); in cyber2000fb_setup_ddc_bus()
1233 cfb->ddc_adapter.owner = THIS_MODULE; in cyber2000fb_setup_ddc_bus()
1234 cfb->ddc_adapter.class = I2C_CLASS_DDC; in cyber2000fb_setup_ddc_bus()
1235 cfb->ddc_adapter.algo_data = &cfb->ddc_algo; in cyber2000fb_setup_ddc_bus()
1236 cfb->ddc_adapter.dev.parent = cfb->fb.device; in cyber2000fb_setup_ddc_bus()
1237 cfb->ddc_algo.setsda = cyber2000fb_ddc_setsda; in cyber2000fb_setup_ddc_bus()
1238 cfb->ddc_algo.setscl = cyber2000fb_ddc_setscl; in cyber2000fb_setup_ddc_bus()
1239 cfb->ddc_algo.getsda = cyber2000fb_ddc_getsda; in cyber2000fb_setup_ddc_bus()
1240 cfb->ddc_algo.getscl = cyber2000fb_ddc_getscl; in cyber2000fb_setup_ddc_bus()
1241 cfb->ddc_algo.udelay = 10; in cyber2000fb_setup_ddc_bus()
1242 cfb->ddc_algo.timeout = 20; in cyber2000fb_setup_ddc_bus()
1243 cfb->ddc_algo.data = cfb; in cyber2000fb_setup_ddc_bus()
1245 i2c_set_adapdata(&cfb->ddc_adapter, cfb); in cyber2000fb_setup_ddc_bus()
1247 return i2c_bit_add_bus(&cfb->ddc_adapter); in cyber2000fb_setup_ddc_bus()
1254 struct cfb_info *cfb = data; in cyber2000fb_i2c_setsda() local
1257 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1258 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setsda()
1262 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setsda()
1263 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setsda()
1268 struct cfb_info *cfb = data; in cyber2000fb_i2c_setscl() local
1271 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1272 latch2 = cyber2000_grphr(EXT_LATCH2, cfb); in cyber2000fb_i2c_setscl()
1276 cyber2000_grphw(EXT_LATCH2, latch2, cfb); in cyber2000fb_i2c_setscl()
1277 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_setscl()
1282 struct cfb_info *cfb = data; in cyber2000fb_i2c_getsda() local
1285 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1286 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_DAT); in cyber2000fb_i2c_getsda()
1287 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getsda()
1294 struct cfb_info *cfb = data; in cyber2000fb_i2c_getscl() local
1297 spin_lock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1298 ret = !!(cyber2000_grphr(EXT_LATCH2, cfb) & EXT_LATCH2_I2C_CLK); in cyber2000fb_i2c_getscl()
1299 spin_unlock(&cfb->reg_b0_lock); in cyber2000fb_i2c_getscl()
1304 static int cyber2000fb_i2c_register(struct cfb_info *cfb) in cyber2000fb_i2c_register() argument
1306 strlcpy(cfb->i2c_adapter.name, cfb->fb.fix.id, in cyber2000fb_i2c_register()
1307 sizeof(cfb->i2c_adapter.name)); in cyber2000fb_i2c_register()
1308 cfb->i2c_adapter.owner = THIS_MODULE; in cyber2000fb_i2c_register()
1309 cfb->i2c_adapter.algo_data = &cfb->i2c_algo; in cyber2000fb_i2c_register()
1310 cfb->i2c_adapter.dev.parent = cfb->fb.device; in cyber2000fb_i2c_register()
1311 cfb->i2c_algo.setsda = cyber2000fb_i2c_setsda; in cyber2000fb_i2c_register()
1312 cfb->i2c_algo.setscl = cyber2000fb_i2c_setscl; in cyber2000fb_i2c_register()
1313 cfb->i2c_algo.getsda = cyber2000fb_i2c_getsda; in cyber2000fb_i2c_register()
1314 cfb->i2c_algo.getscl = cyber2000fb_i2c_getscl; in cyber2000fb_i2c_register()
1315 cfb->i2c_algo.udelay = 5; in cyber2000fb_i2c_register()
1316 cfb->i2c_algo.timeout = msecs_to_jiffies(100); in cyber2000fb_i2c_register()
1317 cfb->i2c_algo.data = cfb; in cyber2000fb_i2c_register()
1319 return i2c_bit_add_bus(&cfb->i2c_adapter); in cyber2000fb_i2c_register()
1322 static void cyber2000fb_i2c_unregister(struct cfb_info *cfb) in cyber2000fb_i2c_unregister() argument
1324 i2c_del_adapter(&cfb->i2c_adapter); in cyber2000fb_i2c_unregister()
1327 #define cyber2000fb_i2c_register(cfb) (0) argument
1328 #define cyber2000fb_i2c_unregister(cfb) do { } while (0) argument
1388 static void cyberpro_init_hw(struct cfb_info *cfb) in cyberpro_init_hw() argument
1393 cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb); in cyberpro_init_hw()
1395 if (cfb->id == ID_CYBERPRO_5000) { in cyberpro_init_hw()
1397 cyber2000fb_writeb(0xba, 0x3ce, cfb); in cyberpro_init_hw()
1398 val = cyber2000fb_readb(0x3cf, cfb) & 0x80; in cyberpro_init_hw()
1399 cyber2000fb_writeb(val, 0x3cf, cfb); in cyberpro_init_hw()
1405 struct cfb_info *cfb; in cyberpro_alloc_fb_info() local
1407 cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL); in cyberpro_alloc_fb_info()
1408 if (!cfb) in cyberpro_alloc_fb_info()
1412 cfb->id = id; in cyberpro_alloc_fb_info()
1415 cfb->ref_ps = 40690; /* 24.576 MHz */ in cyberpro_alloc_fb_info()
1417 cfb->ref_ps = 69842; /* 14.31818 MHz (69841?) */ in cyberpro_alloc_fb_info()
1419 cfb->divisors[0] = 1; in cyberpro_alloc_fb_info()
1420 cfb->divisors[1] = 2; in cyberpro_alloc_fb_info()
1421 cfb->divisors[2] = 4; in cyberpro_alloc_fb_info()
1424 cfb->divisors[3] = 8; in cyberpro_alloc_fb_info()
1426 cfb->divisors[3] = 6; in cyberpro_alloc_fb_info()
1428 strcpy(cfb->fb.fix.id, name); in cyberpro_alloc_fb_info()
1430 cfb->fb.fix.type = FB_TYPE_PACKED_PIXELS; in cyberpro_alloc_fb_info()
1431 cfb->fb.fix.type_aux = 0; in cyberpro_alloc_fb_info()
1432 cfb->fb.fix.xpanstep = 0; in cyberpro_alloc_fb_info()
1433 cfb->fb.fix.ypanstep = 1; in cyberpro_alloc_fb_info()
1434 cfb->fb.fix.ywrapstep = 0; in cyberpro_alloc_fb_info()
1438 cfb->fb.fix.accel = 0; in cyberpro_alloc_fb_info()
1442 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2000; in cyberpro_alloc_fb_info()
1446 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER2010; in cyberpro_alloc_fb_info()
1450 cfb->fb.fix.accel = FB_ACCEL_IGS_CYBER5000; in cyberpro_alloc_fb_info()
1454 cfb->fb.var.nonstd = 0; in cyberpro_alloc_fb_info()
1455 cfb->fb.var.activate = FB_ACTIVATE_NOW; in cyberpro_alloc_fb_info()
1456 cfb->fb.var.height = -1; in cyberpro_alloc_fb_info()
1457 cfb->fb.var.width = -1; in cyberpro_alloc_fb_info()
1458 cfb->fb.var.accel_flags = FB_ACCELF_TEXT; in cyberpro_alloc_fb_info()
1460 cfb->fb.fbops = &cyber2000fb_ops; in cyberpro_alloc_fb_info()
1461 cfb->fb.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; in cyberpro_alloc_fb_info()
1462 cfb->fb.pseudo_palette = cfb->pseudo_palette; in cyberpro_alloc_fb_info()
1464 spin_lock_init(&cfb->reg_b0_lock); in cyberpro_alloc_fb_info()
1466 fb_alloc_cmap(&cfb->fb.cmap, NR_PALETTE, 0); in cyberpro_alloc_fb_info()
1468 return cfb; in cyberpro_alloc_fb_info()
1471 static void cyberpro_free_fb_info(struct cfb_info *cfb) in cyberpro_free_fb_info() argument
1473 if (cfb) { in cyberpro_free_fb_info()
1477 fb_alloc_cmap(&cfb->fb.cmap, 0, 0); in cyberpro_free_fb_info()
1479 kfree(cfb); in cyberpro_free_fb_info()
1522 static int cyberpro_common_probe(struct cfb_info *cfb) in cyberpro_common_probe() argument
1528 cyberpro_init_hw(cfb); in cyberpro_common_probe()
1535 cfb->mem_ctl1 = cyber2000_grphr(EXT_MEM_CTL1, cfb); in cyberpro_common_probe()
1536 cfb->mem_ctl2 = cyber2000_grphr(EXT_MEM_CTL2, cfb); in cyberpro_common_probe()
1541 switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) { in cyberpro_common_probe()
1556 cfb->fb.fix.smem_len = smem_size; in cyberpro_common_probe()
1557 cfb->fb.fix.mmio_len = MMIO_SIZE; in cyberpro_common_probe()
1558 cfb->fb.screen_base = cfb->region; in cyberpro_common_probe()
1561 if (cyber2000fb_setup_ddc_bus(cfb) == 0) in cyberpro_common_probe()
1562 cfb->ddc_registered = true; in cyberpro_common_probe()
1566 if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0, in cyberpro_common_probe()
1568 printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id); in cyberpro_common_probe()
1572 cfb->fb.var.yres_virtual = cfb->fb.fix.smem_len * 8 / in cyberpro_common_probe()
1573 (cfb->fb.var.bits_per_pixel * cfb->fb.var.xres_virtual); in cyberpro_common_probe()
1575 if (cfb->fb.var.yres_virtual < cfb->fb.var.yres) in cyberpro_common_probe()
1576 cfb->fb.var.yres_virtual = cfb->fb.var.yres; in cyberpro_common_probe()
1586 h_sync = 1953125000 / cfb->fb.var.pixclock; in cyberpro_common_probe()
1587 h_sync = h_sync * 512 / (cfb->fb.var.xres + cfb->fb.var.left_margin + in cyberpro_common_probe()
1588 cfb->fb.var.right_margin + cfb->fb.var.hsync_len); in cyberpro_common_probe()
1589 v_sync = h_sync / (cfb->fb.var.yres + cfb->fb.var.upper_margin + in cyberpro_common_probe()
1590 cfb->fb.var.lower_margin + cfb->fb.var.vsync_len); in cyberpro_common_probe()
1593 cfb->fb.fix.id, cfb->fb.fix.smem_len >> 10, in cyberpro_common_probe()
1594 cfb->fb.var.xres, cfb->fb.var.yres, in cyberpro_common_probe()
1597 err = cyber2000fb_i2c_register(cfb); in cyberpro_common_probe()
1601 err = register_framebuffer(&cfb->fb); in cyberpro_common_probe()
1603 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_probe()
1607 if (err && cfb->ddc_registered) in cyberpro_common_probe()
1608 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_probe()
1613 static void cyberpro_common_remove(struct cfb_info *cfb) in cyberpro_common_remove() argument
1615 unregister_framebuffer(&cfb->fb); in cyberpro_common_remove()
1617 if (cfb->ddc_registered) in cyberpro_common_remove()
1618 i2c_del_adapter(&cfb->ddc_adapter); in cyberpro_common_remove()
1620 cyber2000fb_i2c_unregister(cfb); in cyberpro_common_remove()
1623 static void cyberpro_common_resume(struct cfb_info *cfb) in cyberpro_common_resume() argument
1625 cyberpro_init_hw(cfb); in cyberpro_common_resume()
1630 cyber2000_grphw(EXT_MEM_CTL1, cfb->mem_ctl1, cfb); in cyberpro_common_resume()
1631 cyber2000_grphw(EXT_MEM_CTL2, cfb->mem_ctl2, cfb); in cyberpro_common_resume()
1637 cyber2000fb_set_par(&cfb->fb); in cyberpro_common_resume()
1650 static int cyberpro_pci_enable_mmio(struct cfb_info *cfb) in cyberpro_pci_enable_mmio() argument
1692 if (cfb->id == ID_CYBERPRO_2010) { in cyberpro_pci_enable_mmio()
1694 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1696 val = cyber2000_grphr(EXT_BUS_CTL, cfb); in cyberpro_pci_enable_mmio()
1699 cfb->fb.fix.id); in cyberpro_pci_enable_mmio()
1703 if (cfb->id == ID_CYBERPRO_5000) in cyberpro_pci_enable_mmio()
1706 cyber2000_grphw(EXT_BUS_CTL, val, cfb); in cyberpro_pci_enable_mmio()
1716 struct cfb_info *cfb; in cyberpro_pci_probe() local
1727 cfb = cyberpro_alloc_fb_info(id->driver_data, name); in cyberpro_pci_probe()
1728 if (!cfb) in cyberpro_pci_probe()
1731 err = pci_request_regions(dev, cfb->fb.fix.id); in cyberpro_pci_probe()
1735 cfb->irq = dev->irq; in cyberpro_pci_probe()
1736 cfb->region = pci_ioremap_bar(dev, 0); in cyberpro_pci_probe()
1737 if (!cfb->region) { in cyberpro_pci_probe()
1742 cfb->regs = cfb->region + MMIO_OFFSET; in cyberpro_pci_probe()
1743 cfb->fb.device = &dev->dev; in cyberpro_pci_probe()
1744 cfb->fb.fix.mmio_start = pci_resource_start(dev, 0) + MMIO_OFFSET; in cyberpro_pci_probe()
1745 cfb->fb.fix.smem_start = pci_resource_start(dev, 0); in cyberpro_pci_probe()
1753 err = cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_probe()
1760 cfb->mclk_mult = cyber2000_grphr(EXT_MCLK_MULT, cfb); in cyberpro_pci_probe()
1761 cfb->mclk_div = cyber2000_grphr(EXT_MCLK_DIV, cfb); in cyberpro_pci_probe()
1768 cfb->mclk_mult = 0xdb; in cyberpro_pci_probe()
1769 cfb->mclk_div = 0x54; in cyberpro_pci_probe()
1773 err = cyberpro_common_probe(cfb); in cyberpro_pci_probe()
1780 pci_set_drvdata(dev, cfb); in cyberpro_pci_probe()
1782 int_cfb_info = cfb; in cyberpro_pci_probe()
1787 iounmap(cfb->region); in cyberpro_pci_probe()
1791 cyberpro_free_fb_info(cfb); in cyberpro_pci_probe()
1798 struct cfb_info *cfb = pci_get_drvdata(dev); in cyberpro_pci_remove() local
1800 if (cfb) { in cyberpro_pci_remove()
1801 cyberpro_common_remove(cfb); in cyberpro_pci_remove()
1802 iounmap(cfb->region); in cyberpro_pci_remove()
1803 cyberpro_free_fb_info(cfb); in cyberpro_pci_remove()
1805 if (cfb == int_cfb_info) in cyberpro_pci_remove()
1822 struct cfb_info *cfb = pci_get_drvdata(dev); in cyberpro_pci_resume() local
1824 if (cfb) { in cyberpro_pci_resume()
1825 cyberpro_pci_enable_mmio(cfb); in cyberpro_pci_resume()
1826 cyberpro_common_resume(cfb); in cyberpro_pci_resume()