Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08a498de authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds
Browse files

matroxfb: color setting fixes



- 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: default avatarAntonino Daplas <adaplas@gmail.com>
Acked-by: default avatarPetr Vandrovec <vandrove@vc.cvut.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 000d5335
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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)     |
@@ -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) |
+1 −1
Original line number Diff line number Diff line
@@ -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)
+0 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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__ */