1*4882a593Smuzhiyun[PATCH] fbv: support bgr555 format 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunSigned-off-by: Josh.Wu <josh.wu@atmel.com> 4*4882a593Smuzhiyundiff -Naur fbv-1.0b-ori/fb_display.c fbv-1.0b/fb_display.c 5*4882a593Smuzhiyun--- fbv-1.0b-ori/fb_display.c 2010-04-02 09:38:15.000000000 +0800 6*4882a593Smuzhiyun+++ fbv-1.0b/fb_display.c 2010-04-01 18:54:15.000000000 +0800 7*4882a593Smuzhiyun@@ -297,6 +297,14 @@ 8*4882a593Smuzhiyun ((b >> 3) & 31) ); 9*4882a593Smuzhiyun } 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun+inline static unsigned short make15color_bgr(unsigned char r, unsigned char g, unsigned char b) 12*4882a593Smuzhiyun+{ 13*4882a593Smuzhiyun+ return ( 14*4882a593Smuzhiyun+ (((b >> 3) & 31) << 10) | 15*4882a593Smuzhiyun+ (((g >> 3) & 31) << 5) | 16*4882a593Smuzhiyun+ ((r >> 3) & 31) ); 17*4882a593Smuzhiyun+} 18*4882a593Smuzhiyun+ 19*4882a593Smuzhiyun inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b) 20*4882a593Smuzhiyun { 21*4882a593Smuzhiyun return ( 22*4882a593Smuzhiyun@@ -313,6 +321,14 @@ 23*4882a593Smuzhiyun u_int16_t *s_fbbuff; 24*4882a593Smuzhiyun u_int32_t *i_fbbuff; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun+ int is_bgr555 = 0; 27*4882a593Smuzhiyun+ struct fb_var_screeninfo var; 28*4882a593Smuzhiyun+ getVarScreenInfo(fh, &var); 29*4882a593Smuzhiyun+ if(var.red.offset == 0 && 30*4882a593Smuzhiyun+ var.green.offset == 5 && 31*4882a593Smuzhiyun+ var.blue.offset == 10) 32*4882a593Smuzhiyun+ is_bgr555 = 1; 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun switch(bpp) 35*4882a593Smuzhiyun { 36*4882a593Smuzhiyun case 8: 37*4882a593Smuzhiyun@@ -325,15 +341,23 @@ 38*4882a593Smuzhiyun case 15: 39*4882a593Smuzhiyun *cpp = 2; 40*4882a593Smuzhiyun s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); 41*4882a593Smuzhiyun- for(i = 0; i < count ; i++) 42*4882a593Smuzhiyun- s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 43*4882a593Smuzhiyun+ if(is_bgr555) 44*4882a593Smuzhiyun+ for(i = 0; i < count ; i++) 45*4882a593Smuzhiyun+ s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 46*4882a593Smuzhiyun+ else 47*4882a593Smuzhiyun+ for(i = 0; i < count ; i++) 48*4882a593Smuzhiyun+ s_fbbuff[i] = make15color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 49*4882a593Smuzhiyun fbbuff = (void *) s_fbbuff; 50*4882a593Smuzhiyun break; 51*4882a593Smuzhiyun case 16: 52*4882a593Smuzhiyun *cpp = 2; 53*4882a593Smuzhiyun s_fbbuff = (unsigned short *) malloc(count * sizeof(unsigned short)); 54*4882a593Smuzhiyun- for(i = 0; i < count ; i++) 55*4882a593Smuzhiyun- s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 56*4882a593Smuzhiyun+ if(is_bgr555) 57*4882a593Smuzhiyun+ for(i = 0; i < count ; i++) 58*4882a593Smuzhiyun+ s_fbbuff[i] = make15color_bgr(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 59*4882a593Smuzhiyun+ else 60*4882a593Smuzhiyun+ for(i = 0; i < count ; i++) 61*4882a593Smuzhiyun+ s_fbbuff[i] = make16color(rgbbuff[i*3], rgbbuff[i*3+1], rgbbuff[i*3+2]); 62*4882a593Smuzhiyun fbbuff = (void *) s_fbbuff; 63*4882a593Smuzhiyun break; 64*4882a593Smuzhiyun case 24: 65