Problem with current fb_get_color_depth function
From: Joshua Kwan (joshk_at_triplehelix.org)
Date: 10/11/04
- Previous message: Dave Jones: "[PATCH] find_isa_irq_pin can't be __init"
- Next in thread: Antonino A. Daplas: "Re: Problem with current fb_get_color_depth function"
- Reply: Antonino A. Daplas: "Re: Problem with current fb_get_color_depth function"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sun, 10 Oct 2004 15:59:03 -0700 To: adaplas@pol.net
Hi Antonino, lists, etc.,
I noticed that after 2.6.9-rc1 or so my framebuffer logo stopped
appearing. Well, I dove into the fb layer code, noticed this change from
you:
int fb_get_color_depth(struct fb_info *info)
{
struct fb_var_screeninfo *var = &info->var;
if (var->green.length == var->blue.length &&
var->green.length == var->red.length &&
!var->green.offset && !var->blue.offset &&
!var->red.offset)
return var->green.length;
else
return (var->green.length + var->red.length +
var->blue.length);
}
That was interesting, because here's what radeonfb does:
switch (var_to_depth(&v)) {
[...]
case 16:
nom = 2;
den = 1;
v.red.offset = 11;
v.green.offset = 5;
v.blue.offset = 0;
v.red.length = 5;
v.green.length = 6;
v.blue.length = 5;
v.transp.offset = v.transp.length = 0;
break;
[...]
So somehow that first conditional was firing, although I'm not sure how,
because a printk showed that the depth returned was 6. (fb_get_color_depth
should have jumped to the return (R + G + B) part right after it noticed
blue length was not equal to green length. Creepy.)
Well, whatever. The 224-color logo was ignored. This is what I did to
fix it:
--- a/drivers/video/fbmem.c 2004/09/23 01:19:45 1.102
+++ b/drivers/video/fbmem.c 2004/10/10 22:47:14
@@ -65,10 +65,8 @@
{
struct fb_var_screeninfo *var = &info->var;
- if (var->green.length == var->blue.length &&
- var->green.length == var->red.length &&
- !var->green.offset && !var->blue.offset &&
- !var->red.offset)
+ /* If grayscale, all values will be equal */
+ if (var->grayscale)
return var->green.length;
else
return (var->green.length + var->red.length +
because on advice from Andrew Suffield and Matthew Garrett the first
conditional was a roundabout way to check for grayscale displays, where
you can't actually have 24 bits (8 + 8 + 8) of gray. So it is suitable
to just return one of the values arbitrarily. But I noticed there was
also a grayscale variable, so I substituted that for the conditional
and my logo reappeared again :)
So is radeonfb or fb_get_color_depth at fault here? Or was the logo
never appropriate for my display in the first place? (Unlikely, the
CLUT224 linux logo always displayed perfectly for me until now.)
Thanks.
-- Joshua Kwan
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
- application/pgp-signature attachment: Digital signature
- Previous message: Dave Jones: "[PATCH] find_isa_irq_pin can't be __init"
- Next in thread: Antonino A. Daplas: "Re: Problem with current fb_get_color_depth function"
- Reply: Antonino A. Daplas: "Re: Problem with current fb_get_color_depth function"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|