diff options
Diffstat (limited to 'common/lcd.c')
| -rw-r--r-- | common/lcd.c | 27 | 
1 files changed, 13 insertions, 14 deletions
| diff --git a/common/lcd.c b/common/lcd.c index 56bf067fb5e..aa81522fffe 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -26,7 +26,7 @@  #endif  #include <lcd.h>  #include <watchdog.h> - +#include <asm/unaligned.h>  #include <splash.h>  #if defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \ @@ -777,9 +777,9 @@ static void lcd_display_rle8_bitmap(bmp_image_t *bmp, ushort *cmap, uchar *fb,  	int x, y;  	int decode = 1; -	width = le32_to_cpu(bmp->header.width); -	height = le32_to_cpu(bmp->header.height); -	bmap = (uchar *)bmp + le32_to_cpu(bmp->header.data_offset); +	width = get_unaligned_le32(&bmp->header.width); +	height = get_unaligned_le32(&bmp->header.height); +	bmap = (uchar *)bmp + get_unaligned_le32(&bmp->header.data_offset);  	x = 0;  	y = height - 1; @@ -900,9 +900,10 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)  		return 1;  	} -	width = le32_to_cpu(bmp->header.width); -	height = le32_to_cpu(bmp->header.height); -	bmp_bpix = le16_to_cpu(bmp->header.bit_count); +	width = get_unaligned_le32(&bmp->header.width); +	height = get_unaligned_le32(&bmp->header.height); +	bmp_bpix = get_unaligned_le16(&bmp->header.bit_count); +  	colors = 1 << bmp_bpix;  	bpix = NBITS(panel_info.vl_bpix); @@ -917,9 +918,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)  	/* We support displaying 8bpp BMPs on 16bpp LCDs */  	if (bpix != bmp_bpix && !(bmp_bpix == 8 && bpix == 16)) {  		printf ("Error: %d bit/pixel mode, but BMP has %d bit/pixel\n", -			bpix, -			le16_to_cpu(bmp->header.bit_count)); - +			bpix, get_unaligned_le16(&bmp->header.bit_count));  		return 1;  	} @@ -956,7 +955,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)  		}  	}  #endif -  	/*  	 *  BMP format for Monochrome assumes that the state of a  	 * pixel is described on a per Bit basis, not per Byte. @@ -987,15 +985,16 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)  	if ((y + height) > panel_info.vl_row)  		height = panel_info.vl_row - y; -	bmap = (uchar *) bmp + le32_to_cpu(bmp->header.data_offset); -	fb   = (uchar *) (lcd_base + +	bmap = (uchar *)bmp + get_unaligned_le32(&bmp->header.data_offset); +	fb   = (uchar *)(lcd_base +  		(y + height - 1) * lcd_line_length + x * bpix / 8);  	switch (bmp_bpix) {  	case 1: /* pass through */  	case 8:  #ifdef CONFIG_LCD_BMP_RLE8 -		if (le32_to_cpu(bmp->header.compression) == BMP_BI_RLE8) { +		u32 compression = get_unaligned_le32(&bmp->header.compression); +		if (compression == BMP_BI_RLE8) {  			if (bpix != 16) {  				/* TODO implement render code for bpix != 16 */  				printf("Error: only support 16 bpix"); | 
