1.1 --- a/stage2/lcd.c Tue Jan 26 00:10:43 2016 +0100
1.2 +++ b/stage2/lcd.c Tue Jan 26 15:02:43 2016 +0100
1.3 @@ -64,39 +64,56 @@
1.4 return (scale * num) / denom;
1.5 }
1.6
1.7 -static unsigned long pixel(unsigned short h, unsigned short v, u8 rmax, u8 gmax, u8 bmax, u8 rshift, u8 gshift, u8 bshift)
1.8 +static unsigned long pixel(u8 r, u8 g, u8 b, u8 rmax, u8 gmax, u8 bmax, u8 rshift, u8 gshift, u8 bshift)
1.9 +{
1.10 + return (div(r, 255, rmax) << rshift) | (div(g, 255, gmax) << gshift) | (div(b, 255, bmax) << bshift);
1.11 +}
1.12 +
1.13 +static void get_colour(unsigned short h, unsigned short v, u8 rgb[])
1.14 {
1.15 unsigned short v_max = panel_info.vl_row;
1.16 unsigned short h_max = panel_info.vl_col;
1.17
1.18 - return (((rmax - div(h, h_max, rmax + 1) + rmax - div(v, v_max, rmax + 1)) / 2) << rshift) |
1.19 - ((gmax - div(v, v_max, gmax + 1)) << gshift) |
1.20 - (((div(h, h_max, bmax + 1) + div(v, v_max, bmax + 1)) / 2) << bshift);
1.21 + rgb[0] = div(h, h_max, 255);
1.22 + rgb[1] = div(v, v_max, 255);
1.23 + rgb[2] = (rgb[0] + rgb[1]) / 2;
1.24 }
1.25
1.26 static void test_pixel32(unsigned short h, unsigned short v)
1.27 {
1.28 u32 *pix = get_pixel32(h, v);
1.29 - *pix = (u32) pixel(h, v, 255, 255, 255, 16, 8, 0);
1.30 + u8 rgb[3];
1.31 +
1.32 + get_colour(h, v, rgb);
1.33 + *pix = (u32) pixel(rgb[0], rgb[1], rgb[2], 255, 255, 255, 16, 8, 0);
1.34 }
1.35
1.36 static void test_pixel16_565(unsigned short h, unsigned short v)
1.37 {
1.38 u16 *pix = get_pixel16(h, v);
1.39 - *pix = (u16) pixel(h, v, 31, 63, 31, 11, 5, 0);
1.40 + u8 rgb[3];
1.41 +
1.42 + get_colour(h, v, rgb);
1.43 + *pix = (u16) pixel(rgb[0], rgb[1], rgb[2], 31, 63, 31, 11, 5, 0);
1.44 }
1.45
1.46 static void test_pixel8(unsigned short h, unsigned short v)
1.47 {
1.48 u8 *pix = get_pixel8(h, v);
1.49 - *pix = (u8) pixel(h, v, 7, 7, 3, 5, 2, 0);
1.50 + u8 rgb[3];
1.51 +
1.52 + get_colour(h, v, rgb);
1.53 + *pix = (u8) pixel(rgb[0], rgb[1], rgb[2], 7, 7, 3, 5, 2, 0);
1.54 }
1.55
1.56 static void test_pixel4(unsigned short h, unsigned short v)
1.57 {
1.58 u8 *pix = get_pixel4(h, v);
1.59 u8 mask = h & 1 ? 0xf0 : 0x0f;
1.60 - *pix = (*pix & mask) | ((u8) pixel(h, v, 1, 2, 1, 3, 1, 0) << (h & 1 ? 0 : 4));
1.61 + u8 rgb[3];
1.62 +
1.63 + get_colour(h, v, rgb);
1.64 + *pix = (*pix & mask) | ((u8) pixel(rgb[0], rgb[1], rgb[2], 1, 2, 1, 3, 1, 0) << (h & 1 ? 0 : 4));
1.65 }
1.66
1.67 void test_pixel(unsigned short h, unsigned short v)