X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fvideo%2Fstifb.c;h=8b76a919297e4bd0f7693eb81e8fdba3d401a175;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=4b7e498d024813973606b962a9cd71ff3f892e7b;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/video/stifb.c b/drivers/video/stifb.c index 4b7e498d0..8b76a9192 100644 --- a/drivers/video/stifb.c +++ b/drivers/video/stifb.c @@ -112,6 +112,7 @@ struct stifb_info { ngle_rom_t ngle_rom; struct sti_struct *sti; int deviceSpecificConfig; + u32 pseudo_palette[16]; }; static int __initdata bpp = 8; /* parameter from modprobe */ @@ -1030,6 +1031,14 @@ stifb_setcolreg(u_int regno, u_int red, u_int green, /* 0x100 is same as used in WRITE_IMAGE_COLOR() */ START_COLORMAPLOAD(fb, lutBltCtl.all); SETUP_FB(fb); + + /* info->var.bits_per_pixel == 32 */ + if (regno < 16) + ((u32 *)(info->pseudo_palette))[regno] = + (red << info->var.red.offset) | + (green << info->var.green.offset) | + (blue << info->var.blue.offset); + } else { /* cleanup colormap hardware */ FINISH_IMAGE_COLORMAP_ACCESS(fb); @@ -1326,7 +1335,7 @@ stifb_init_fb(struct sti_struct *sti, int force_bpp) info->fbops = &stifb_ops; info->screen_base = (void*) REGION_BASE(fb,1); info->flags = FBINFO_DEFAULT; - info->currcon = -1; + info->pseudo_palette = &fb->pseudo_palette; /* This has to been done !!! */ fb_alloc_cmap(&info->cmap, 256, 0); @@ -1383,6 +1392,7 @@ int __init stifb_init(void) { struct sti_struct *sti; + struct sti_struct *def_sti; int i; #ifndef MODULE @@ -1397,9 +1407,19 @@ stifb_init(void) return -ENXIO; } + def_sti = sti_get_rom(0); + if (def_sti) { + for (i = 1; i < MAX_STI_ROMS; i++) { + sti = sti_get_rom(i); + if (sti == def_sti && bpp > 0) + stifb_force_bpp[i] = bpp; + } + stifb_init_fb(def_sti, stifb_force_bpp[i]); + } + for (i = 1; i < MAX_STI_ROMS; i++) { sti = sti_get_rom(i); - if (!sti) + if (!sti || sti==def_sti) break; if (bpp > 0) stifb_force_bpp[i] = bpp;