En el datasheet del jz4740 pone esto:
256×16 bits internal palette RAM
Se supone que si usamos un framebuffer de 8bpp, se copiarán a la GRAM del LCD los colores de 16 bits que tengamos definidos en la paleta, ¿no?
Esta es la función usada para definir la paleta:
Código:
static int jzfb_slcd_setcolreg(u32 regno, u8 red, u8 green, u8 blue)
{
u16 *ptr, ctmp;
if (regno >= NR_PALETTE)
return 1;
red &= 0xff;
green &= 0xff;
blue &= 0xff;
jzfb_slcd.palette[regno].red = red ;
jzfb_slcd.palette[regno].green = green;
jzfb_slcd.palette[regno].blue = blue;
if (jzfb_slcd.bpp <= 8) {
if (((jzfb_slcd.cfg & MODE_MASK) == MODE_STN_MONO_SINGLE) ||
((jzfb_slcd.cfg & MODE_MASK) == MODE_STN_MONO_DUAL)) {
ctmp = (77L * red + 150L * green + 29L * blue) >> 8;
ctmp = ((ctmp >> 3) << 11) | ((ctmp >> 2) << 5) |
(ctmp >> 3);
} else {
/* RGB 565 */
if (((red >> 3) == 0) && ((red >> 2) != 0))
red = 1 << 3;
if (((blue >> 3) == 0) && ((blue >> 2) != 0))
blue = 1 << 3;
ctmp = ((red >> 3) << 11)
| ((green >> 2) << 5) | (blue >> 3);
}
ptr = (u16 *)jzfb_slcd.pal;
ptr[regno] = ctmp;
REG_DMAC_DDA(dma_chan) = PHYS(&slcd_palette_desc);
} else
printf("No palette used.\n");
return 0;
}
Marcadores