The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / fbv / 0004-fix-bgr555.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/fbv/0004-fix-bgr555.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/fbv/0004-fix-bgr555.patch
new file mode 100644 (file)
index 0000000..8f185f0
--- /dev/null
@@ -0,0 +1,64 @@
+[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: