@@ -275,23 +275,23 @@ static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red,
275
275
struct bcm2708_fb * fb = to_bcm2708 (info );
276
276
277
277
/*pr_info("BCM2708FB: setcolreg %d:(%02x,%02x,%02x,%02x) %x\n", regno, red, green, blue, transp, fb->fb.fix.visual);*/
278
- if (regno < 16 )
278
+ if (fb -> fb .var .bits_per_pixel <= 8 ) {
279
+ if (regno < 256 ) {
280
+ /* blue [0:4], green [5:10], red [11:15] */
281
+ fb -> info -> cmap [regno ] = ((red >> (16 - 5 )) & 0x1f ) << 11 |
282
+ ((green >> (16 - 6 )) & 0x3f ) << 5 |
283
+ ((blue >> (16 - 5 )) & 0x1f ) << 0 ;
284
+ }
285
+ /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */
286
+ /* So just call it for what looks like the last colour in a list for now. */
287
+ if (regno == 15 || regno == 255 )
288
+ bcm2708_fb_set_par (info );
289
+ } else if (regno < 16 ) {
279
290
fb -> cmap [regno ] = convert_bitfield (transp , & fb -> fb .var .transp ) |
280
291
convert_bitfield (blue , & fb -> fb .var .blue ) |
281
292
convert_bitfield (green , & fb -> fb .var .green ) |
282
293
convert_bitfield (red , & fb -> fb .var .red );
283
-
284
- if (regno < 256 ) {
285
- /* blue [0:4], green [5:10], red [11:15] */
286
- fb -> info -> cmap [regno ] = ((red >> (16 - 5 )) & 0x1f ) << 11 |
287
- ((green >> (16 - 6 )) & 0x3f ) << 5 |
288
- ((blue >> (16 - 5 )) & 0x1f ) << 0 ;
289
294
}
290
- /* Hack: we need to tell GPU the palette has changed, but currently bcm2708_fb_set_par takes noticable time when called for every (256) colour */
291
- /* So just call it for what looks like the last colour in a list for now. */
292
- if (regno == 15 || regno == 255 )
293
- bcm2708_fb_set_par (info );
294
-
295
295
return regno > 255 ;
296
296
}
297
297
0 commit comments