diff options
Diffstat (limited to 'drivers/video/retz3fb.c')
-rw-r--r-- | drivers/video/retz3fb.c | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/drivers/video/retz3fb.c b/drivers/video/retz3fb.c index 8bfffe147..995e86506 100644 --- a/drivers/video/retz3fb.c +++ b/drivers/video/retz3fb.c @@ -178,7 +178,11 @@ static struct fb_videomode retz3fb_predefined[] __initdata = { "640x480", { /* 640x480, 8 bpp */ 640, 480, 640, 480, 0, 0, 8, 0, {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, +#if 1 + 0, 0, -1, -1, FB_ACCEL_NONE, 39722, 48, 16, 33, 10, 96, 2, +#else 0, 0, -1, -1, FB_ACCELF_TEXT, 38461, 28, 32, 12, 10, 96, 2, +#endif FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,FB_VMODE_NONINTERLACED } }, @@ -194,8 +198,24 @@ static struct fb_videomode retz3fb_predefined[] __initdata = { FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED } }, + { + "800x600-60", { /* 800x600, 8 bpp */ + 800, 600, 800, 600, 0, 0, 8, 0, + {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, + 0, 0, -1, -1, FB_ACCELF_TEXT, 25000, 88, 40, 23, 1, 128, 4, + FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED + } + }, + { + "800x600-70", { /* 800x600, 8 bpp */ + 800, 600, 800, 600, 0, 0, 8, 0, + {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, + 0, 0, -1, -1, FB_ACCELF_TEXT, 22272, 40, 24, 15, 9, 144, 12, + FB_SYNC_COMP_HIGH_ACT, FB_VMODE_NONINTERLACED + } + }, /* - ModeLine "1024x768i" 45 1024 1064 1224 1264 768 777 785 817 interlace + ModeLine "1024x768i" 45 1024 1064 1224 1264 768 777 785 817 interlace < name > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL */ { @@ -205,14 +225,24 @@ static struct fb_videomode retz3fb_predefined[] __initdata = { 0, 0, -1, -1, FB_ACCELF_TEXT, 22222, 40, 40, 32, 9, 160, 8, FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_INTERLACED } - }, { + }, + { + "1024x768", { + 1024, 768, 1024, 768, 0, 0, 8, 0, + {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, + 0, 0, -1, -1, FB_ACCEL_NONE, 12500, 92, 112, 31, 2, 204, 4, + FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED + } + }, + { "640x480-16", { /* 640x480, 16 bpp */ 640, 480, 640, 480, 0, 0, 16, 0, {11, 5, 0}, {5, 6, 0}, {0, 5, 0}, {0, 0, 0}, 0, 0, -1, -1, 0, 38461/2, 28, 32, 12, 10, 96, 2, FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,FB_VMODE_NONINTERLACED } - }, { + }, + { "640x480-24", { /* 640x480, 24 bpp */ 640, 480, 640, 480, 0, 0, 24, 0, {8, 8, 8}, {8, 8, 8}, {8, 8, 8}, {0, 0, 0}, @@ -421,7 +451,7 @@ static int retz3_set_video(struct fb_info *info, data.h_total = (hback / 8) + (xres / 8) + (hfront / 8) + (hsync / 8) - 1 /* + 1 */; data.h_dispend = ((xres + bpp - 1)/ 8) - 1; - data.h_bstart = xres / 8 /* + 1 */; + data.h_bstart = xres / 8 - 1 /* + 1 */; data.h_bstop = data.h_total+1 + 2 + 1; data.h_sstart = (xres / 8) + (hfront / 8) + 1; @@ -430,7 +460,7 @@ static int retz3_set_video(struct fb_info *info, data.v_total = yres + vfront + vsync + vback - 1; data.v_dispend = yres - 1; - data.v_bstart = yres; + data.v_bstart = yres - 1; data.v_bstop = data.v_total; data.v_sstart = yres + vfront - 1 - 2; @@ -727,7 +757,7 @@ static int retz3_set_video(struct fb_info *info, reg_w(regs, VDAC_MASK, 0xff); /* - * Extended palette adressing ??? + * Extended palette addressing ??? */ switch (bpp){ case 8: @@ -1198,7 +1228,7 @@ static void retz3fb_set_disp(int con, struct fb_info *info) case 8: if (display->var.accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_retz3_8; -#warning FIXME: We should reinit the graphics engine here + retz3_set_video(info, &display->var, &zinfo->current_par); } else display->dispsw = &fbcon_cfb8; break; @@ -1266,7 +1296,6 @@ static int retz3fb_set_var(struct fb_var_screeninfo *var, int con, case 8: if (var->accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_retz3_8; -#warning FIXME: We should reinit the graphics engine here } else display->dispsw = &fbcon_cfb8; break; @@ -1280,9 +1309,14 @@ static int retz3fb_set_var(struct fb_var_screeninfo *var, int con, display->dispsw = &fbcon_dummy; break; } -/* - retz3fb_set_disp(con, info); -*/ + /* + * We still need to find a way to tell the X + * server that the video mem has been fiddled with + * so it redraws the entire screen when switching + * between X and a text console. + */ + retz3_set_video(info, var, &zinfo->current_par); + if (info->changevar) (*info->changevar)(con); } @@ -1421,8 +1455,7 @@ __initfunc(void retz3fb_init(void)) board_addr = (unsigned long)cd->cd_BoardAddr; board_size = (unsigned long)cd->cd_BoardSize; - zinfo->base = kernel_map (board_addr, board_size, - KERNELMAP_NOCACHE_SER, NULL); + zinfo->base = ioremap(board_addr, board_size); zinfo->regs = (unsigned char *)(zinfo->base); zinfo->fbmem = zinfo->base + VIDEO_MEM_OFFSET; /* Get memory size - for now we asume its a 4MB board */ |