matroxfb: color setting fixes
authorAntonino A. Daplas <adaplas@gmail.com>
Tue, 17 Jul 2007 11:05:45 +0000 (04:05 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 17 Jul 2007 17:23:13 +0000 (10:23 -0700)
- 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>
drivers/video/matrox/matroxfb_accel.c
drivers/video/matrox/matroxfb_base.c
drivers/video/matrox/matroxfb_base.h
drivers/video/matrox/matroxfb_crtc2.c
drivers/video/matrox/matroxfb_crtc2.h

index c57aaadf410c9d5a6cfe030282315311aecbb585..209fe697ecc7f6f132afce56d1075e7ba48737a2 100644 (file)
@@ -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;
index 886e475f22f28e395d45066eae6106aa3f4e6c30..86ca7b17900089f058b236986225addb846a6c85 100644 (file)
@@ -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) |
index 9c25c2f7966b3c14e755e057b675e3f7b4ce7301..d59577c8de86b2f50e765609d7e3a1d028f345cc 100644 (file)
@@ -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)
index 03ae55b168ff3a9b8e12a43f0e828c2816d945db..4b3344e03695239bcc2b6f08ea31b8866fe56bb2 100644 (file)
@@ -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;
index 177177609be77c095fbbd721e5489d53d96e3396..1005582e843e5084cecd6d99175c8168e0e1a375 100644 (file)
@@ -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__ */