Re: Problem with current fb_get_color_depth function
flat view
From: Antonino A. Daplas <hidden>
Date: 2004-10-11 00:33:18
Also in:
lkml
On Monday 11 October 2004 06:59, Joshua Kwan wrote:
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.)
This is because radeonfb chooses directcolor for its visual. With RGB565,
the depth == 16, true. However, unlike truecolor where color values are
hardwired to linear values, directcolor looks at the hardware CLUT.
So, with directcolor RGB656, these are the CLUT lengths:
Red and Blue = 32 (2 ^ 5)
Green = 64 (2 ^ 6)
(And you can see this in radeonfb_base:radeonfb_setcolreg())
if (rinfo->bpp == 16) {
pindex = regno * 8;
if (rinfo->depth == 16 && regno > 63)
return 1;
if (rinfo->depth == 15 && regno > 31)
return 1;
However, linux_logo_224 requires a CLUT with these lengths:
Red = Green = Blue = 224;
So, linux_logo_224 cannot be drawn when visual is directcolor at RGB555 or
RGB565 because the logo clut requirements exceeds the hardware clut
capability. You need to use a logo image with a lower depth such as the
16-color logo, linux_logo_16.
In short, fb_get_color_depth() and radeonfb both do the correct thing, but
you need a logo with a lower color depth. Or choose RGB888 or higher, or
set the visual to truecolor.
Tony
PS: Note that this behavior is the same as 2.4 behavior (224-color logo is
only chosen if directcolor and bpp >= 24). It might have worked before, and
this is probably due to the directcolor clut being ramped to truecolor
values. However, the correct solution is to use a 16-color logo.