Skip to content

Commit 49d5c7b

Browse files
adaplasLinus Torvalds
authored andcommitted
[PATCH] fbdev: cirrusfb: Driver cleanup and bug fixes
- pseudo_palette is only 16 entries long - the pseudo_palette, if using the generic drawing functions, must always be u32 regardless of bpp - the fillrect accelerator is using region->color regardless of the visual. region->color is the index to the pseudo_palette if visual is truecolor Signed-off-by: Antonino Daplas <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent fe655d3 commit 49d5c7b

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

drivers/video/cirrusfb.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ struct cirrusfb_info {
404404
struct cirrusfb_regs currentmode;
405405
int blank_mode;
406406

407-
u32 pseudo_palette[17];
407+
u32 pseudo_palette[16];
408408
struct { u8 red, green, blue, pad; } palette[256];
409409

410410
#ifdef CONFIG_ZORRO
@@ -1603,14 +1603,14 @@ static int cirrusfb_setcolreg (unsigned regno, unsigned red, unsigned green,
16031603

16041604
switch (info->var.bits_per_pixel) {
16051605
case 8:
1606-
((u8*)(info->pseudo_palette))[regno] = v;
1606+
cinfo->pseudo_palette[regno] = v;
16071607
break;
16081608
case 16:
1609-
((u16*)(info->pseudo_palette))[regno] = v;
1609+
cinfo->pseudo_palette[regno] = v;
16101610
break;
16111611
case 24:
16121612
case 32:
1613-
((u32*)(info->pseudo_palette))[regno] = v;
1613+
cinfo->pseudo_palette[regno] = v;
16141614
break;
16151615
}
16161616
return 0;
@@ -2020,18 +2020,21 @@ static void cirrusfb_prim_fillrect(struct cirrusfb_info *cinfo,
20202020
const struct fb_fillrect *region)
20212021
{
20222022
int m; /* bytes per pixel */
2023+
u32 color = (cinfo->info->fix.visual == FB_VISUAL_TRUECOLOR) ?
2024+
cinfo->pseudo_palette[region->color] : region->color;
2025+
20232026
if(cinfo->info->var.bits_per_pixel == 1) {
20242027
cirrusfb_RectFill(cinfo->regbase, cinfo->info->var.bits_per_pixel,
20252028
region->dx / 8, region->dy,
20262029
region->width / 8, region->height,
2027-
region->color,
2030+
color,
20282031
cinfo->currentmode.line_length);
20292032
} else {
20302033
m = ( cinfo->info->var.bits_per_pixel + 7 ) / 8;
20312034
cirrusfb_RectFill(cinfo->regbase, cinfo->info->var.bits_per_pixel,
20322035
region->dx * m, region->dy,
20332036
region->width * m, region->height,
2034-
region->color,
2037+
color,
20352038
cinfo->currentmode.line_length);
20362039
}
20372040
return;

0 commit comments

Comments
 (0)