summaryrefslogtreecommitdiffstats
path: root/drivers/video/cyberfb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/cyberfb.c')
-rw-r--r--drivers/video/cyberfb.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/video/cyberfb.c b/drivers/video/cyberfb.c
index 80ec1481b..6882ebfb0 100644
--- a/drivers/video/cyberfb.c
+++ b/drivers/video/cyberfb.c
@@ -166,6 +166,8 @@ static unsigned char Cyber_colour_table [256][3];
static unsigned long CyberMem;
static unsigned long CyberSize;
static volatile char *CyberRegs;
+static unsigned long CyberMem_phys;
+static unsigned long CyberRegs_phys;
/* From cvision.c for cvision_core.c */
static unsigned long cv64_mem;
static unsigned long cv64_fbmem;
@@ -428,9 +430,9 @@ static int Cyber_encode_fix(struct fb_fix_screeninfo *fix,
DPRINTK("ENTER\n");
memset(fix, 0, sizeof(struct fb_fix_screeninfo));
strcpy(fix->id, cyberfb_name);
- fix->smem_start = (char*) virt_to_phys ((void *)CyberMem);
+ fix->smem_start = (char*) CyberMem_phys;
fix->smem_len = CyberSize;
- fix->mmio_start = (char*) virt_to_phys ((void *)CyberRegs);
+ fix->mmio_start = (char*) CyberRegs_phys;
fix->mmio_len = 0x10000;
fix->type = FB_TYPE_PACKED_PIXELS;
@@ -1144,8 +1146,7 @@ __initfunc(void cyberfb_init(void))
DPRINTK("board_addr=%08lx\n", board_addr);
DPRINTK("board_size=%08lx\n", board_size);
- cv64_mem = kernel_map (board_addr, board_size, KERNELMAP_NOCACHE_SER,
- NULL);
+ cv64_mem = ioremap(board_addr, board_size);
cv64_regs = (volatile char *)(cv64_mem + 0x02000000);
cv64_fbmem = cv64_mem + 0x01400000;
DPRINTK("cv64_mem=%08lx cv64_regs=%08lx cv64_fbmem=%08lx\n",
@@ -1153,6 +1154,8 @@ __initfunc(void cyberfb_init(void))
CyberMem = cv64_fbmem;
CyberRegs = cv64_regs;
+ CyberMem_phys = board_addr + 0x01400000;
+ CyberRegs_phys = CyberMem_phys + 0x00c00000;
DPRINTK("CyberMem=%08lx CyberRegs=%08lx\n", CyberMem,
(long unsigned int)CyberRegs);
@@ -1453,7 +1456,7 @@ unsigned char cvconscolors[16][3] = { /* background, foreground, hilite */
/* -------------------- Hardware specific routines ------------------------- */
#if 0
/* ARB Generates 100 usec delay */
-inline void __delay (unsigned long usecs)
+inline void __cv_delay (unsigned long usecs)
{
int k;
@@ -1493,7 +1496,7 @@ inline unsigned char RAttr (volatile caddr_t board, short idx)
{
vgaw (board, ACT_ADDRESS_W, idx);
udelay(100);
- /* __delay (0); */
+ /* __cv_delay (0); */
return (vgar (board, ACT_ADDRESS_R));
}
@@ -1895,7 +1898,7 @@ static void cv64_board_init (void)
vgaw16 (cv64_regs, ECR_BKGD_MIX, 0x07);
vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x1000);
udelay(200);
- /* __delay (200000); */
+ /* __cv_delay (200000); */
vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x2000);
Cyber_WaitBlit();
/* GfxBusyWait (cv64_regs); */
@@ -1903,7 +1906,7 @@ static void cv64_board_init (void)
Cyber_WaitBlit();
/* GfxBusyWait (cv64_regs); */
udelay(200);
- /* __delay (200000); */
+ /* __cv_delay (200000); */
vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x4FFF);
Cyber_WaitBlit();
/* GfxBusyWait (cv64_regs); */
@@ -1961,7 +1964,9 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
int xres, hfront, hsync, hback;
int yres, vfront, vsync, vback;
int bpp;
+#if 0
float freq_f;
+#endif
long freq;
/* ---------------- */
@@ -2066,9 +2071,15 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
/* cv64_compute_clock accepts arguments in Hz */
/* pixclock is in ps ... convert to Hz */
+#if 0
freq_f = (1.0 / (float) video_mode->pixclock) * 1000000000;
freq = ((long) freq_f) * 1000;
-
+#else
+/* freq = (long) ((long long)1000000000000 / (long long) video_mode->pixclock);
+ */
+ freq = (1000000000 / video_mode->pixclock) * 1000;
+#endif
+
mnr = cv64_compute_clock (freq);
WSeq (cv64_regs, SEQ_ID_DCLK_HI, ((mnr & 0xFF00) >> 8));
WSeq (cv64_regs, SEQ_ID_DCLK_LO, (mnr & 0xFF));
@@ -2257,14 +2268,14 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
WCrt (cv64_regs, CRT_ID_EXT_SYS_CNTL_1, cr50);
udelay(100);
- /* __delay (100000); */
+ /* __cv_delay (100000); */
WAttr (cv64_regs, ACT_ID_ATTR_MODE_CNTL, (TEXT ? 0x08 : 0x41));
udelay(100);
- /* __delay (100000); */
+ /* __cv_delay (100000); */
WAttr (cv64_regs, ACT_ID_COLOR_PLANE_ENA,
(video_mode->bits_per_pixel == 1) ? 0x01 : 0x0F);
udelay(100);
- /* __delay (100000); */
+ /* __cv_delay (100000); */
tfillm = (96 * (cv64_memclk / 1000)) / 240000;
@@ -2296,7 +2307,7 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
WCrt (cv64_regs, CRT_ID_EXT_MEM_CNTL_2, m);
WCrt (cv64_regs, CRT_ID_EXT_MEM_CNTL_3, n);
udelay(10);
- /* __delay (10000); */
+ /* __cv_delay (10000); */
/* Text initialization */