Dear Mark Jackson,

In message <497f1732.6050...@mimc.co.uk> you wrote:
> This patch adds 16bpp BMP support to the common lcd code.
> 
> Use CONFIG_BMP_16BPP and set LCD_BPP to LCD_COLOR16 to enable the code.
> 
> At the moment it's only been tested on the MIMC200 AVR32 board, but extending 
> this to other platforms should be a simple task !!
> 
> Signed-off-by: Mark Jackson <m...@mimc.co.uk>
> ---
> 
>   common/lcd.c |   49 +++++++++++++++++++++++++++++++++++++++----------
>   1 files changed, 39 insertions(+), 10 deletions(-)
> 
> diff --git a/common/lcd.c b/common/lcd.c
> index ae79051..16d6f2a 100644
> --- a/common/lcd.c
> +++ b/common/lcd.c
> @@ -84,7 +84,7 @@ extern void lcd_enable (void);
>   static void *lcd_logo (void);
> 
> 
> -#if LCD_BPP == LCD_COLOR8
> +#if (LCD_BPP == LCD_COLOR8) || (LCD_BPP == LCD_COLOR16)
>   extern void lcd_setcolreg (ushort regno,
>                               ushort red, ushort green, ushort blue);
>   #endif
> @@ -656,7 +656,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
> 
>       bpix = NBITS(panel_info.vl_bpix);
> 
> -     if ((bpix != 1) && (bpix != 8)) {
> +     if ((bpix != 1) && (bpix != 8) && (bpix != 16)) {
>               printf ("Error: %d bit/pixel mode not supported by U-Boot\n",
>                       bpix);
>               return 1;
> @@ -738,17 +738,46 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
>       bmap = (uchar *)bmp + le32_to_cpu (bmp->header.data_offset);
>       fb   = (uchar *) (lcd_base +
>               (y + height - 1) * lcd_line_length + x);
> -     for (i = 0; i < height; ++i) {
> -             WATCHDOG_RESET();
> -             for (j = 0; j < width ; j++)
> +
> +     switch (bpix) {
> +     case 1: /* pass through */
> +     case 8:
> +             for (i = 0; i < height; ++i) {
> +                     WATCHDOG_RESET();
> +                     for (j = 0; j < width ; j++)
>   #if defined(CONFIG_PXA250) || defined(CONFIG_ATMEL_LCD)
> -                     *(fb++) = *(bmap++);
> +                             *(fb++) = *(bmap++);
>   #elif defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
> -                     *(fb++)=255-*(bmap++);
> +                             *(fb++)=255-*(bmap++);
>   #endif
> -             bmap += (width - padded_line);
> -             fb   -= (width + lcd_line_length);
> -     }
> +                     bmap += (width - padded_line);
> +                     fb   -= (width + lcd_line_length);
> +             }
> +             break;
> +     
> +#if defined(CONFIG_BMP_16BPP)
> +     case 16:
> +             for (i = 0; i < height; ++i) {
> +                     WATCHDOG_RESET();
> +                     for (j = 0; j < width; j++) {
> +#if defined(CONFIG_ATMEL_LCD_BGR555)
> +                             *(fb++) = ((bmap[0] & 0x1f) << 2) | (bmap[1] & 
> 0x03);
> +                             *(fb++) = (bmap[0] & 0xe0) | ((bmap[1] & 0x7c) 
> >> 2);
> +                             bmap += 2;
> +#else
> +                             *(fb++) = *(bmap++);
> +                             *(fb++) = *(bmap++);
> +#endif
> +                     }
> +                     bmap += (padded_line - width) * 2;
> +                     fb   -= (width * 2 + lcd_line_length);

Is it intentional that you reverse padded_line and width here, i.e.
you are sure it's not

                        bmap += (width - padded_line) * 2;
?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
If you're not part of the solution, you're part of the problem.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to