Commit 6620ca7d authored by Josh.Wu's avatar Josh.Wu Committed by Peter Korsgaard
Browse files

fbv: add patch to support bgr555 framebuffer format.



[Peter: add header to patch, fix file permissions]
Signed-off-by: default avatarJosh.Wu <josh.wu@atmel.com>
Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
parent c03c626e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
	New packages: librsync, lmbench, netperf, squid

	Updated/fixed packages: busybox, dnsmasq, dosfstools,
	e2fsprogs, freetype, iperf, iptables, iw, less, libdrm,
	e2fsprogs, fbv, freetype, iperf, iptables, iw, less, libdrm,
	libgcrypt, libglib2, libpng, libxml2, matchbox, mdadm, memstat,
	mtd-utils, nano, openssl, php, pppd, qt, radvd, setserial,
	squashfs, wget, xlib_libX11, xlib_libXfont
+64 −0
Original line number Diff line number Diff line
[PATCH] fbv: support bgr555 format

Signed-off-by: Josh.Wu <josh.wu@atmel.com>
diff -Naur fbv-1.0b-ori/fb_display.c fbv-1.0b/fb_display.c
--- fbv-1.0b-ori/fb_display.c	2010-04-02 09:38:15.000000000 +0800
+++ fbv-1.0b/fb_display.c	2010-04-01 18:54:15.000000000 +0800
@@ -297,6 +297,14 @@
 	 ((b >> 3) & 31)        );
 }
 
+inline static unsigned short make15color_bgr(unsigned char r, unsigned char g, unsigned char b)
+{
+    return (
+	(((b >> 3) & 31) << 10) |
+	(((g >> 3) & 31) << 5)  |
+	 ((r >> 3) & 31)        );
+}
+
 inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b)
 {
     return (
@@ -313,6 +321,14 @@
     u_int16_t *s_fbbuff;
     u_int32_t *i_fbbuff;
 
+    int is_bgr555 = 0;
+    struct fb_var_screeninfo var;
+    getVarScreenInfo(fh, &var);
+    if(var.red.offset == 0 && 
+       var.green.offset == 5 && 
+       var.blue.offset == 10)
+	is_bgr555 = 1;
+
     switch(bpp)
     {
 	case 8:
@@ -325,15 +341,23 @@
 	case 15:
 	    *cpp = 2;
 	    s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short));
-	    for(i = 0; i < count ; i++)
-		s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
+	    if(is_bgr555)
+	    	for(i = 0; i < count ; i++)
+		    s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
+	    else
+	    	for(i = 0; i < count ; i++)
+		    s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
 	    fbbuff = (void *) s_fbbuff;
 	    break;
 	case 16:
 	    *cpp = 2;
 	    s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short));
-	    for(i = 0; i < count ; i++)
-		s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
+	    if(is_bgr555)
+	    	for(i = 0; i < count ; i++)
+		    s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
+	    else
+	    	for(i = 0; i < count ; i++)
+		    s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]);
 	    fbbuff = (void *) s_fbbuff;
 	    break;
 	case 24: