From: "Antonino A. Daplas" Although the depth can be correctly inferred from bits_per_pixel (if bits_per_pixel == 1), for the sake of consistency, drivers should still set the color fields correctly. True even if the first patch is not applied. (I've combined everything in a single diff since there is only 1 logical change) Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- 25-akpm/drivers/video/68328fb.c | 13 +++++++++++++ 25-akpm/drivers/video/bw2.c | 6 +++++- 25-akpm/drivers/video/cirrusfb.c | 6 ++++++ 25-akpm/drivers/video/dnfb.c | 3 +++ 25-akpm/drivers/video/macfb.c | 3 +++ 25-akpm/drivers/video/stifb.c | 1 + 25-akpm/drivers/video/tx3912fb.c | 3 +++ 7 files changed, 34 insertions(+), 1 deletion(-) diff -puN drivers/video/68328fb.c~fbdev-set-color-fields-correctly drivers/video/68328fb.c --- 25/drivers/video/68328fb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.131602240 -0700 +++ 25-akpm/drivers/video/68328fb.c 2004-07-28 20:41:59.167596768 -0700 @@ -199,6 +199,15 @@ static int mc68x328fb_check_var(struct f */ switch (var->bits_per_pixel) { case 1: + var->red.offset = 0; + var->red.length = 1; + var->green.offset = 0; + var->green.length = 1; + var->blue.offset = 0; + var->blue.length = 1; + var->transp.offset = 0; + var->transp.length = 0; + break; case 8: var->red.offset = 0; var->red.length = 8; @@ -452,6 +461,10 @@ int __init mc68x328fb_init(void) get_line_length(mc68x328fb_default.xres_virtual, mc68x328fb_default.bits_per_pixel); fb_info.fix.visual = (mc68x328fb_default.bits_per_pixel) == 1 ? MC68X328FB_MONO_VISUAL : FB_VISUAL_PSEUDOCOLOR; + if (fb_info.var.bits_per_pixel == 1) { + fb_info.var.red.length = fb_info.var.green.length = fb_info.var.blue.length = 1; + fb_info.var.red.offset = fb_info.var.green.offset = fb_info.var.blue.offset = 0; + } fb_info.pseudo_palette = &mc68x328fb_pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; diff -puN drivers/video/bw2.c~fbdev-set-color-fields-correctly drivers/video/bw2.c --- 25/drivers/video/bw2.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.143600416 -0700 +++ 25-akpm/drivers/video/bw2.c 2004-07-28 20:41:59.168596616 -0700 @@ -323,7 +323,7 @@ static void bw2_init_one(struct sbus_dev resp = &res; all->info.var.xres = all->info.var.xres_virtual = 1152; all->info.var.yres = all->info.var.yres_virtual = 900; - all->info.bits_per_pixel = 1; + all->info.var.bits_per_pixel = 1; linebytes = 1152 / 8; } else #else @@ -337,6 +337,10 @@ static void bw2_init_one(struct sbus_dev all->info.var.xres); } #endif + all->info.var.red.length = all->info.var.green.length = + all->info.var.blue.length = all_info.var.bits_per_pixel; + all->info.var.red.offset = all->info.var.green.offset = + all->info.var.blue.offset = 0; all->par.regs = (struct bw2_regs *) sbus_ioremap(resp, BWTWO_REGISTER_OFFSET, diff -puN drivers/video/cirrusfb.c~fbdev-set-color-fields-correctly drivers/video/cirrusfb.c --- 25/drivers/video/cirrusfb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.145600112 -0700 +++ 25-akpm/drivers/video/cirrusfb.c 2004-07-28 20:41:59.170596312 -0700 @@ -752,6 +752,12 @@ int cirrusfb_check_var(struct fb_var_scr switch (var->bits_per_pixel) { case 1: + var->red.offset = 0; + var->red.length = 1; + var->green.offset = 0; + var->green.length = 1; + var->blue.offset = 0; + var->blue.length = 1; break; case 8: diff -puN drivers/video/dnfb.c~fbdev-set-color-fields-correctly drivers/video/dnfb.c --- 25/drivers/video/dnfb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.146599960 -0700 +++ 25-akpm/drivers/video/dnfb.c 2004-07-28 20:41:59.171596160 -0700 @@ -239,6 +239,9 @@ static int __devinit dnfb_probe(struct d info->fbops = &dn_fb_ops; info->fix = dnfb_fix; info->var = dnfb_var; + info->var.red.length = 1; + info->var.red.offset = 0; + info->var.green = info->var.blue = info->var.red; info->screen_base = (u_char *) info->fix.smem_start; err = fb_alloc_cmap(&info->cmap, 2, 0); diff -puN drivers/video/macfb.c~fbdev-set-color-fields-correctly drivers/video/macfb.c --- 25/drivers/video/macfb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.154598744 -0700 +++ 25-akpm/drivers/video/macfb.c 2004-07-28 20:41:59.172596008 -0700 @@ -660,6 +660,9 @@ void __init macfb_init(void) case 1: /* XXX: I think this will catch any program that tries to do FBIO_PUTCMAP when the visual is monochrome */ + macfb_defined.red.length = macfb_defined.bits_per_pixel; + macfb_defined.green.length = macfb_defined.bits_per_pixel; + macfb_defined.blue.length = macfb_defined.bits_per_pixel; video_cmap_len = 0; macfb_fix.visual = FB_VISUAL_MONO01; break; diff -puN drivers/video/stifb.c~fbdev-set-color-fields-correctly drivers/video/stifb.c --- 25/drivers/video/stifb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.160597832 -0700 +++ 25-akpm/drivers/video/stifb.c 2004-07-28 20:41:59.173595856 -0700 @@ -1298,6 +1298,7 @@ stifb_init_fb(struct sti_struct *sti, in case 1: fix->type = FB_TYPE_PLANES; /* well, sort of */ fix->visual = FB_VISUAL_MONO10; + var->red.length = var->green.length = var->blue.length = 1; break; case 8: fix->type = FB_TYPE_PACKED_PIXELS; diff -puN drivers/video/tx3912fb.c~fbdev-set-color-fields-correctly drivers/video/tx3912fb.c --- 25/drivers/video/tx3912fb.c~fbdev-set-color-fields-correctly 2004-07-28 20:41:59.163597376 -0700 +++ 25-akpm/drivers/video/tx3912fb.c 2004-07-28 20:41:59.174595704 -0700 @@ -60,6 +60,9 @@ static struct fb_var_screeninfo tx3912fb .blue = { 0, 2, 0 }, #else .bits_per_pixel =4, + .red = { 0, 4, 0 }, /* ??? */ + .green = { 0, 4, 0 }, + .blue = { 0, 4, 0 }, #endif .activate = FB_ACTIVATE_NOW, .width = -1, _