Commit 6aca0d9a authored by Alan Cox's avatar Alan Cox Committed by Linus Torvalds

[PATCH] fix vga16 build until James console updates are merged

parent 32a96cee
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/selection.h> #include <linux/selection.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -81,22 +82,33 @@ struct vga16fb_par { ...@@ -81,22 +82,33 @@ struct vga16fb_par {
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
static struct fb_var_screeninfo vga16fb_defined = { static struct fb_var_screeninfo vga16fb_defined = {
640,480,640,480,/* W,H, W, H (virtual) load xres,xres_virtual*/ .xres = 640,
0,0, /* virtual -> visible no offset */ .yres = 480,
4, /* depth -> load bits_per_pixel */ .xres_virtual = 640,
0, /* greyscale ? */ .yres_virtual = 480,
{0,0,0}, /* R */ .bits_per_pixel = 4,
{0,0,0}, /* G */ .activate = FB_ACTIVATE_NOW,
{0,0,0}, /* B */ .height = -1,
{0,0,0}, /* transparency */ .width = -1,
0, /* standard pixel format */ .pixclock = 39721,
FB_ACTIVATE_NOW, .left_margin = 48,
-1,-1, .right_margin = 16,
0, .upper_margin = 39,
39721, 48, 16, 39, 8, .lower_margin = 8,
96, 2, 0, /* No sync info */ .hsync_len = 96,
FB_VMODE_NONINTERLACED, .vsync_len = 2,
{0,0,0,0,0,0} .vmode = FB_VMODE_NONINTERLACED,
};
static struct fb_fix_screeninfo vga16fb_fix __initdata = {
.id = "VGA16 VGA",
.smem_start = VGA_FB_PHYS,
.smem_len = VGA_FB_PHYS_LEN,
.type = FB_TYPE_VGA_PLANES,
.visual = FB_VISUAL_PSEUDOCOLOR,
.xpanstep = 8,
.ypanstep = 1,
.line_length = 640 / 8,
}; };
static struct display disp; static struct display disp;
...@@ -121,69 +133,22 @@ static void vga16fb_pan_var(struct fb_info *info, struct fb_var_screeninfo *var) ...@@ -121,69 +133,22 @@ static void vga16fb_pan_var(struct fb_info *info, struct fb_var_screeninfo *var)
#endif #endif
} }
static int vga16fb_update_var(int con, struct fb_info *info)
{
vga16fb_pan_var(info, &fb_display[con].var);
return 0;
}
static int vga16fb_get_fix(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info)
{
struct display *p;
if (con < 0)
p = &disp;
else
p = fb_display + con;
memset(fix, 0, sizeof(struct fb_fix_screeninfo));
strcpy(fix->id,"VGA16 VGA");
fix->smem_start = VGA_FB_PHYS;
fix->smem_len = VGA_FB_PHYS_LEN;
fix->type = FB_TYPE_VGA_PLANES;
fix->visual = FB_VISUAL_PSEUDOCOLOR;
fix->xpanstep = 8;
fix->ypanstep = 1;
fix->ywrapstep = 0;
fix->line_length = p->var.xres_virtual / 8;
return 0;
}
static int vga16fb_get_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info)
{
if(con==-1)
memcpy(var, &vga16fb_defined, sizeof(struct fb_var_screeninfo));
else
*var=fb_display[con].var;
return 0;
}
static void vga16fb_set_disp(int con, struct vga16fb_info *info) static void vga16fb_set_disp(int con, struct vga16fb_info *info)
{ {
struct fb_fix_screeninfo fix; struct display *display = (con < 0) ? info->fb_info.disp : (fb_display + con);
struct display *display;
if (con < 0)
display = &disp;
else
display = fb_display + con;
vga16fb_get_fix(&fix, con, &info->fb_info);
display->visual = fix.visual;
display->type = fix.type;
display->type_aux = fix.type_aux;
display->ypanstep = fix.ypanstep;
display->ywrapstep = fix.ywrapstep;
display->line_length = fix.line_length;
display->next_line = fix.line_length;
display->can_soft_blank = 1; display->can_soft_blank = 1;
display->dispsw_data = NULL;
display->var = info->fb_info.var;
display->inverse = 0; display->inverse = 0;
/*
* If we are setting all the virtual consoles, also set
* the defaults used to create new consoles.
*/
if (con < 0 || info->fb_info.var.activate & FB_ACTIVATE_ALL)
info->fb_info.disp->var = info->fb_info.var;
if (info->isVGA) if (info->isVGA)
display->dispsw = &fbcon_vga_planes; display->dispsw = &fbcon_vga_planes;
else else
...@@ -500,13 +465,9 @@ static int vga16fb_set_var(struct fb_var_screeninfo *var, int con, ...@@ -500,13 +465,9 @@ static int vga16fb_set_var(struct fb_var_screeninfo *var, int con,
{ {
struct vga16fb_info *info = (struct vga16fb_info*)fb; struct vga16fb_info *info = (struct vga16fb_info*)fb;
struct vga16fb_par par; struct vga16fb_par par;
struct display *display; struct display *display = (con < 0) ? fb->disp : (fb_display + con);
int err; int err;
if (con < 0)
display = fb->disp;
else
display = fb_display + con;
if ((err = vga16fb_decode_var(var, &par, info)) != 0) if ((err = vga16fb_decode_var(var, &par, info)) != 0)
return err; return err;
vga16fb_encode_var(var, &par, info); vga16fb_encode_var(var, &par, info);
...@@ -552,25 +513,6 @@ static void ega16_setpalette(int regno, unsigned red, unsigned green, unsigned b ...@@ -552,25 +513,6 @@ static void ega16_setpalette(int regno, unsigned red, unsigned green, unsigned b
outb_p(0x20, 0x3C0); /* unblank screen */ outb_p(0x20, 0x3C0); /* unblank screen */
} }
static int vga16_getcolreg(unsigned regno, unsigned *red, unsigned *green,
unsigned *blue, unsigned *transp,
struct fb_info *fb_info)
{
/*
* Read a single color register and split it into colors/transparent.
* Return != 0 for invalid regno.
*/
if (regno >= 16)
return 1;
*red = palette[regno].red;
*green = palette[regno].green;
*blue = palette[regno].blue;
*transp = 0;
return 0;
}
static void vga16_setpalette(int regno, unsigned red, unsigned green, unsigned blue) static void vga16_setpalette(int regno, unsigned red, unsigned green, unsigned blue)
{ {
outb(regno, dac_reg); outb(regno, dac_reg);
...@@ -615,19 +557,6 @@ static int vga16fb_setcolreg(unsigned regno, unsigned red, unsigned green, ...@@ -615,19 +557,6 @@ static int vga16fb_setcolreg(unsigned regno, unsigned red, unsigned green,
return 0; return 0;
} }
static int vga16fb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info)
{
if (con == info->currcon) /* current console? */
return fb_get_cmap(cmap, kspc, vga16_getcolreg, info);
else if (fb_display[con].cmap.len) /* non default colormap? */
fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
else
fb_copy_cmap(fb_default_cmap(16),
cmap, kspc ? 0 : 2);
return 0;
}
static int vga16fb_pan_display(struct fb_var_screeninfo *var, int con, static int vga16fb_pan_display(struct fb_var_screeninfo *var, int con,
struct fb_info *info) struct fb_info *info)
{ {
...@@ -811,10 +740,8 @@ static int vga16fb_blank(int blank, struct fb_info *fb_info) ...@@ -811,10 +740,8 @@ static int vga16fb_blank(int blank, struct fb_info *fb_info)
static struct fb_ops vga16fb_ops = { static struct fb_ops vga16fb_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.fb_get_fix = vga16fb_get_fix,
.fb_get_var = vga16fb_get_var,
.fb_set_var = vga16fb_set_var, .fb_set_var = vga16fb_set_var,
.fb_get_cmap = vga16fb_get_cmap, .fb_get_cmap = gen_get_cmap,
.fb_set_cmap = gen_set_cmap, .fb_set_cmap = gen_set_cmap,
.fb_setcolreg = vga16fb_setcolreg, .fb_setcolreg = vga16fb_setcolreg,
.fb_pan_display =vga16fb_pan_display, .fb_pan_display =vga16fb_pan_display,
...@@ -839,27 +766,6 @@ int vga16fb_setup(char *options) ...@@ -839,27 +766,6 @@ int vga16fb_setup(char *options)
return 0; return 0;
} }
static int vga16fb_switch(int con, struct fb_info *fb)
{
struct vga16fb_par par;
struct vga16fb_info *info = (struct vga16fb_info*)fb;
/* Do we have to save the colormap? */
if (fb_display[fb->currcon].cmap.len)
fb_get_cmap(&fb_display[fb->currcon].cmap, 1, vga16_getcolreg,
fb);
fb->currcon = con;
vga16fb_decode_var(&fb_display[con].var, &par, info);
vga16fb_set_par(&par, info);
vga16fb_set_disp(con, info);
/* Install new colormap */
do_install_cmap(con, fb);
/* vga16fb_update_var(con, fb); */
return 1;
}
int __init vga16fb_init(void) int __init vga16fb_init(void)
{ {
int i,j; int i,j;
...@@ -895,19 +801,22 @@ int __init vga16fb_init(void) ...@@ -895,19 +801,22 @@ int __init vga16fb_init(void)
disp.var = vga16fb_defined; disp.var = vga16fb_defined;
/* name should not depend on EGA/VGA */ strcpy(vga16fb.fb_info.modename, vga16fb_fix.id);
strcpy(vga16fb.fb_info.modename, "VGA16 VGA");
vga16fb.fb_info.changevar = NULL; vga16fb.fb_info.changevar = NULL;
vga16fb.fb_info.node = NODEV; vga16fb.fb_info.node = NODEV;
vga16fb.fb_info.var = vga16fb_defined;
vga16fb.fb_info.fix = vga16fb_fix;
vga16fb.fb_info.fbops = &vga16fb_ops; vga16fb.fb_info.fbops = &vga16fb_ops;
vga16fb.fb_info.screen_base = vga16fb.video_vbase; vga16fb.fb_info.screen_base = vga16fb.video_vbase;
vga16fb.fb_info.disp=&disp; vga16fb.fb_info.disp=&disp;
vga16fb.fb_info.currcon = -1; vga16fb.fb_info.currcon = -1;
vga16fb.fb_info.switch_con=&vga16fb_switch; vga16fb.fb_info.switch_con=&gen_switch;
vga16fb.fb_info.updatevar=&vga16fb_update_var; vga16fb.fb_info.updatevar=&gen_update_var;
vga16fb.fb_info.flags=FBINFO_FLAG_DEFAULT; vga16fb.fb_info.flags=FBINFO_FLAG_DEFAULT;
vga16fb_set_disp(-1, &vga16fb); vga16fb_set_disp(-1, &vga16fb);
fb_alloc_cmap(&vga16fb.fb_info.cmap, 16, 0);
if (register_framebuffer(&vga16fb.fb_info)<0) { if (register_framebuffer(&vga16fb.fb_info)<0) {
iounmap(vga16fb.video_vbase); iounmap(vga16fb.video_vbase);
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment