diff options
| author | Stefan Roese <sr@denx.de> | 2008-08-11 06:43:38 +0200 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2008-08-11 06:43:38 +0200 | 
| commit | 81c4dc39797e88ebbde14bb4b711f9588f197680 (patch) | |
| tree | 1d518f2187cc027a86e4b7c38739f02a23ea871b /drivers/video/cfb_console.c | |
| parent | eab1007334b93a6209f1ec33615e26ef5311ede7 (diff) | |
| parent | e84d568fa2a9f4ce7888141e71676368ef6b3f25 (diff) | |
| download | olio-uboot-2014.01-81c4dc39797e88ebbde14bb4b711f9588f197680.tar.xz olio-uboot-2014.01-81c4dc39797e88ebbde14bb4b711f9588f197680.zip | |
Merge branch 'master' of /home/stefan/git/u-boot/u-boot
Diffstat (limited to 'drivers/video/cfb_console.c')
| -rw-r--r-- | drivers/video/cfb_console.c | 63 | 
1 files changed, 39 insertions, 24 deletions
| diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 68b9861d4..d313e9098 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -751,24 +751,10 @@ void video_puts (const char *s)  	fb ++;						\  } -#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)  #define FILL_15BIT_555RGB(r,g,b) {			\  	*(unsigned short *)fb = SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3))); \  	fb += 2;					\  } -#else -static int tgl; -static unsigned short p0; -#define FILL_15BIT_555RGB(r,g,b) {			\ -	if (!tgl++) {					\ -		p0 = SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3))); \ -	} else {					\ -		tgl=0;					\ -		*(unsigned long *)(fb-2) = (SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3)))<<16) | p0; \ -	}						\ -	fb += 2;					\ -} -#endif  #define FILL_16BIT_565RGB(r,g,b) {			\  	*(unsigned short *)fb = SWAP16((unsigned short)((((r)>>3)<<11) | (((g)>>2)<<5) | ((b)>>3))); \ @@ -796,6 +782,20 @@ static unsigned short p0;  }  #endif +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +static void inline fill_555rgb_pswap(uchar *fb, int x, +				     u8 r, u8 g, u8 b) +{ +	ushort *dst = (ushort *)fb; +	ushort color = (ushort)(((r >> 3) << 10) | +				((g >> 3) << 5) | +				(b >> 3)); +	if (x & 1) +		*(--dst) = color; +	else +		*(++dst) = color; +} +#endif  /*   * Display the BMP file located at address bmp_image. @@ -927,11 +927,20 @@ int video_display_bitmap (ulong bmp_image, int x, int y)  			break;  		case GDF_15BIT_555RGB:  			while (ycount--) { +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +				int xpos = x; +#endif  				WATCHDOG_RESET ();  				xcount = width;  				while (xcount--) {  					cte = bmp->color_table[*bmap++]; +#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)  					FILL_15BIT_555RGB (cte.red, cte.green, cte.blue); +#else +					fill_555rgb_pswap (fb, xpos++, cte.red, +							   cte.green, cte.blue); +					fb += 2; +#endif  				}  				bmap += padded_line;  				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE; @@ -993,10 +1002,19 @@ int video_display_bitmap (ulong bmp_image, int x, int y)  			break;  		case GDF_15BIT_555RGB:  			while (ycount--) { +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +				int xpos = x; +#endif  				WATCHDOG_RESET ();  				xcount = width;  				while (xcount--) { +#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)  					FILL_15BIT_555RGB (bmap[2], bmap[1], bmap[0]); +#else +					fill_555rgb_pswap (fb, xpos++, bmap[2], +							   bmap[1], bmap[0]); +					fb += 2; +#endif  					bmap += 3;  				}  				bmap += padded_line; @@ -1071,7 +1089,9 @@ void logo_plot (void *screen, int width, int x, int y)  	int ycount = VIDEO_LOGO_HEIGHT;  	unsigned char r, g, b, *logo_red, *logo_blue, *logo_green;  	unsigned char *source; -	unsigned char *dest = (unsigned char *)screen + ((y * width * VIDEO_PIXEL_SIZE) + x); +	unsigned char *dest = (unsigned char *)screen + +			      ((y * width * VIDEO_PIXEL_SIZE) + +			       x * VIDEO_PIXEL_SIZE);  #ifdef CONFIG_VIDEO_BMP_LOGO  	source = bmp_logo_bitmap; @@ -1101,6 +1121,9 @@ void logo_plot (void *screen, int width, int x, int y)  	}  	while (ycount--) { +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +		int xpos = x; +#endif  		xcount = VIDEO_LOGO_WIDTH;  		while (xcount--) {  			r = logo_red[*source - VIDEO_LOGO_LUT_OFFSET]; @@ -1119,15 +1142,7 @@ void logo_plot (void *screen, int width, int x, int y)  				*(unsigned short *) dest =  					SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)));  #else -				{ -					if (!tgl++) { -						p0 = SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3))); -					} else { -						*(unsigned long *)(dest-2) = -							(SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)))<<16) | p0; -						tgl=0; -					} -				} +				fill_555rgb_pswap (dest, xpos++, r, g, b);  #endif  				break;  			case GDF_16BIT_565RGB: |