Skip to content

Commit

Permalink
matroxfb: color setting fixes
Browse files Browse the repository at this point in the history
- the pseudo_palette is only 16 elements long.
- do not write to the pseudo_palette if regno (array index) is more than 15
- remove code that writes to the 17th entry of the pseudo_palette

Signed-off-by: Antonino Daplas <adaplas@gmail.com>
Acked-by: Petr Vandrovec <vandrove@vc.cvut.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Antonino A. Daplas authored and Linus Torvalds committed Jul 17, 2007
1 parent 000d533 commit 08a498d
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 15 deletions.
9 changes: 2 additions & 7 deletions drivers/video/matrox/matroxfb_accel.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,13 +145,10 @@ void matrox_cfbX_init(WPMINFO2) {
ACCESS_FBINFO(fbops).fb_imageblit = matroxfb_imageblit;
}
break;
case 16: if (ACCESS_FBINFO(fbcon).var.green.length == 5) {
case 16: if (ACCESS_FBINFO(fbcon).var.green.length == 5)
maccess = 0xC0000001;
ACCESS_FBINFO(cmap[16]) = 0x7FFF7FFF;
} else {
else
maccess = 0x40000001;
ACCESS_FBINFO(cmap[16]) = 0xFFFFFFFF;
}
mopmode = M_OPMODE_16BPP;
if (accel) {
ACCESS_FBINFO(fbops).fb_copyarea = matroxfb_copyarea;
Expand All @@ -161,7 +158,6 @@ void matrox_cfbX_init(WPMINFO2) {
break;
case 24: maccess = 0x00000003;
mopmode = M_OPMODE_24BPP;
ACCESS_FBINFO(cmap[16]) = 0xFFFFFFFF;
if (accel) {
ACCESS_FBINFO(fbops).fb_copyarea = matroxfb_copyarea;
ACCESS_FBINFO(fbops).fb_fillrect = matroxfb_fillrect;
Expand All @@ -170,7 +166,6 @@ void matrox_cfbX_init(WPMINFO2) {
break;
case 32: maccess = 0x00000002;
mopmode = M_OPMODE_32BPP;
ACCESS_FBINFO(cmap[16]) = 0xFFFFFFFF;
if (accel) {
ACCESS_FBINFO(fbops).fb_copyarea = matroxfb_copyarea;
ACCESS_FBINFO(fbops).fb_fillrect = matroxfb_fillrect;
Expand Down
4 changes: 4 additions & 0 deletions drivers/video/matrox/matroxfb_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,8 @@ static int matroxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
mga_outb(M_DAC_VAL, blue);
break;
case 16:
if (regno >= 16)
break;
{
u_int16_t col =
(red << ACCESS_FBINFO(fbcon).var.red.offset) |
Expand All @@ -690,6 +692,8 @@ static int matroxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
break;
case 24:
case 32:
if (regno >= 16)
break;
ACCESS_FBINFO(cmap[regno]) =
(red << ACCESS_FBINFO(fbcon).var.red.offset) |
(green << ACCESS_FBINFO(fbcon).var.green.offset) |
Expand Down
2 changes: 1 addition & 1 deletion drivers/video/matrox/matroxfb_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ struct matrox_fb_info {
dll:1;
} memory;
} values;
u_int32_t cmap[17];
u_int32_t cmap[16];
};

#define info2minfo(info) container_of(info, struct matrox_fb_info, fbcon)
Expand Down
6 changes: 0 additions & 6 deletions drivers/video/matrox/matroxfb_crtc2.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,6 @@ static void matroxfb_dh_disable(struct matroxfb_dh_fb_info* m2info) {
ACCESS_FBINFO(hw).crtc2.ctl = 0x00000004;
}

static void matroxfb_dh_cfbX_init(struct matroxfb_dh_fb_info* m2info) {
/* no acceleration for secondary head... */
m2info->cmap[16] = 0xFFFFFFFF;
}

static void matroxfb_dh_pan_var(struct matroxfb_dh_fb_info* m2info,
struct fb_var_screeninfo* var) {
unsigned int pos;
Expand Down Expand Up @@ -385,7 +380,6 @@ static int matroxfb_dh_set_par(struct fb_info* info) {
}
}
up_read(&ACCESS_FBINFO(altout).lock);
matroxfb_dh_cfbX_init(m2info);
}
m2info->initialized = 1;
return 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/video/matrox/matroxfb_crtc2.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ struct matroxfb_dh_fb_info {

unsigned int interlaced:1;

u_int32_t cmap[17];
u_int32_t cmap[16];
};

#endif /* __MATROXFB_CRTC2_H__ */

0 comments on commit 08a498d

Please sign in to comment.