|
|
|
@ -29,12 +29,6 @@ |
|
|
|
|
|
|
|
|
|
#include "fsl_diu_fb.h" |
|
|
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
#define DPRINTF(fmt, args...) printf("%s: " fmt,__FUNCTION__,## args) |
|
|
|
|
#else |
|
|
|
|
#define DPRINTF(fmt, args...) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
struct fb_videomode { |
|
|
|
|
const char *name; /* optional */ |
|
|
|
|
unsigned int refresh; /* optional */ |
|
|
|
@ -210,7 +204,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
unsigned char *gamma_table_base; |
|
|
|
|
unsigned int i, j; |
|
|
|
|
|
|
|
|
|
DPRINTF("Enter fsl_diu_init\n"); |
|
|
|
|
debug("Enter fsl_diu_init\n"); |
|
|
|
|
dr.diu_reg = (struct diu *) (CFG_DIU_ADDR); |
|
|
|
|
hw = (struct diu *) dr.diu_reg; |
|
|
|
|
|
|
|
|
@ -224,10 +218,10 @@ int fsl_diu_init(int xres, |
|
|
|
|
|
|
|
|
|
if (0 == fb_initialized) { |
|
|
|
|
allocate_buf(&gamma, 768, 32); |
|
|
|
|
DPRINTF("gamma is allocated @ 0x%x\n", |
|
|
|
|
debug("gamma is allocated @ 0x%x\n", |
|
|
|
|
(unsigned int)gamma.paddr); |
|
|
|
|
allocate_buf(&cursor, MAX_CURS * MAX_CURS * 2, 32); |
|
|
|
|
DPRINTF("curosr is allocated @ 0x%x\n", |
|
|
|
|
debug("curosr is allocated @ 0x%x\n", |
|
|
|
|
(unsigned int)cursor.paddr); |
|
|
|
|
|
|
|
|
|
/* create a dummy fb and dummy ad */ |
|
|
|
@ -255,8 +249,8 @@ int fsl_diu_init(int xres, |
|
|
|
|
dr.diu_reg->desc[0] = (unsigned int) &dummy_ad; |
|
|
|
|
dr.diu_reg->desc[1] = (unsigned int) &dummy_ad; |
|
|
|
|
dr.diu_reg->desc[2] = (unsigned int) &dummy_ad; |
|
|
|
|
DPRINTF("dummy dr.diu_reg->desc[0] = 0x%x\n", dr.diu_reg->desc[0]); |
|
|
|
|
DPRINTF("dummy desc[0] = 0x%x\n", hw->desc[0]); |
|
|
|
|
debug("dummy dr.diu_reg->desc[0] = 0x%x\n", dr.diu_reg->desc[0]); |
|
|
|
|
debug("dummy desc[0] = 0x%x\n", hw->desc[0]); |
|
|
|
|
|
|
|
|
|
/* read mode info */ |
|
|
|
|
var->xres = fsl_diu_mode_db->xres; |
|
|
|
@ -294,7 +288,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
ad->ckmin_b = 255; |
|
|
|
|
|
|
|
|
|
gamma_table_base = gamma.paddr; |
|
|
|
|
DPRINTF("gamma_table_base is allocated @ 0x%x\n", |
|
|
|
|
debug("gamma_table_base is allocated @ 0x%x\n", |
|
|
|
|
(unsigned int)gamma_table_base); |
|
|
|
|
|
|
|
|
|
/* Prep for DIU init - gamma table */ |
|
|
|
@ -304,7 +298,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
*gamma_table_base++ = j; |
|
|
|
|
|
|
|
|
|
if (gamma_fix == 1) { /* fix the gamma */ |
|
|
|
|
DPRINTF("Fix gamma table\n"); |
|
|
|
|
debug("Fix gamma table\n"); |
|
|
|
|
gamma_table_base = gamma.paddr; |
|
|
|
|
for (i = 0; i < 256*3; i++) { |
|
|
|
|
gamma_table_base[i] = (gamma_table_base[i] << 2) |
|
|
|
@ -312,7 +306,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DPRINTF("update-lcdc: HW - %p\n Disabling DIU\n", hw); |
|
|
|
|
debug("update-lcdc: HW - %p\n Disabling DIU\n", hw); |
|
|
|
|
|
|
|
|
|
/* Program DIU registers */ |
|
|
|
|
|
|
|
|
@ -337,7 +331,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
hw->plut = 0x01F5F666; |
|
|
|
|
|
|
|
|
|
/* Pixel Clock configuration */ |
|
|
|
|
DPRINTF("DIU pixclock in ps - %d\n", var->pixclock); |
|
|
|
|
debug("DIU pixclock in ps - %d\n", var->pixclock); |
|
|
|
|
diu_set_pixel_clock(var->pixclock); |
|
|
|
|
|
|
|
|
|
fb_initialized = 1; |
|
|
|
@ -345,7 +339,7 @@ int fsl_diu_init(int xres, |
|
|
|
|
if (splash_bmp) { |
|
|
|
|
info->logo_height = fsl_diu_display_bmp(splash_bmp, 0, 0, 0); |
|
|
|
|
info->logo_size = info->logo_height * info->line_length; |
|
|
|
|
DPRINTF("logo height %d, logo_size 0x%x\n", |
|
|
|
|
debug("logo height %d, logo_size 0x%x\n", |
|
|
|
|
info->logo_height,info->logo_size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -374,10 +368,10 @@ static int fsl_diu_enable_panel(struct fb_info *info) |
|
|
|
|
struct diu *hw = dr.diu_reg; |
|
|
|
|
struct diu_ad *ad = &fsl_diu_fb_ad; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: enable_panel\n"); |
|
|
|
|
debug("Entered: enable_panel\n"); |
|
|
|
|
if (hw->desc[0] != (unsigned int)ad) |
|
|
|
|
hw->desc[0] = (unsigned int)ad; |
|
|
|
|
DPRINTF("desc[0] = 0x%x\n", hw->desc[0]); |
|
|
|
|
debug("desc[0] = 0x%x\n", hw->desc[0]); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -385,7 +379,7 @@ static int fsl_diu_disable_panel(struct fb_info *info) |
|
|
|
|
{ |
|
|
|
|
struct diu *hw = dr.diu_reg; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: disable_panel\n"); |
|
|
|
|
debug("Entered: disable_panel\n"); |
|
|
|
|
if (hw->desc[0] != (unsigned int)&dummy_ad) |
|
|
|
|
hw->desc[0] = (unsigned int)&dummy_ad; |
|
|
|
|
return 0; |
|
|
|
@ -396,10 +390,10 @@ static int map_video_memory(struct fb_info *info, unsigned long bytes_align) |
|
|
|
|
unsigned long offset; |
|
|
|
|
unsigned long mask; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: map_video_memory\n"); |
|
|
|
|
debug("Entered: map_video_memory\n"); |
|
|
|
|
/* allocate maximum 1280*1024 with 32bpp */ |
|
|
|
|
info->smem_len = 1280 * 4 *1024 + bytes_align; |
|
|
|
|
DPRINTF("MAP_VIDEO_MEMORY: smem_len = %d\n", info->smem_len); |
|
|
|
|
debug("MAP_VIDEO_MEMORY: smem_len = %d\n", info->smem_len); |
|
|
|
|
info->screen_base = malloc(info->smem_len); |
|
|
|
|
if (info->screen_base == NULL) { |
|
|
|
|
printf("Unable to allocate fb memory\n"); |
|
|
|
@ -416,7 +410,7 @@ static int map_video_memory(struct fb_info *info, unsigned long bytes_align) |
|
|
|
|
|
|
|
|
|
info->screen_size = info->smem_len; |
|
|
|
|
|
|
|
|
|
DPRINTF("Allocated fb @ 0x%08lx, size=%d.\n", |
|
|
|
|
debug("Allocated fb @ 0x%08lx, size=%d.\n", |
|
|
|
|
info->smem_start, info->smem_len); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
@ -426,19 +420,19 @@ static void enable_lcdc(void) |
|
|
|
|
{ |
|
|
|
|
struct diu *hw = dr.diu_reg; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: enable_lcdc, fb_enabled = %d\n", fb_enabled); |
|
|
|
|
debug("Entered: enable_lcdc, fb_enabled = %d\n", fb_enabled); |
|
|
|
|
if (!fb_enabled) { |
|
|
|
|
hw->diu_mode = dr.mode; |
|
|
|
|
fb_enabled++; |
|
|
|
|
} |
|
|
|
|
DPRINTF("diu_mode = %d\n", hw->diu_mode); |
|
|
|
|
debug("diu_mode = %d\n", hw->diu_mode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void disable_lcdc(void) |
|
|
|
|
{ |
|
|
|
|
struct diu *hw = dr.diu_reg; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: disable_lcdc, fb_enabled = %d\n", fb_enabled); |
|
|
|
|
debug("Entered: disable_lcdc, fb_enabled = %d\n", fb_enabled); |
|
|
|
|
if (fb_enabled) { |
|
|
|
|
hw->diu_mode = 0; |
|
|
|
|
fb_enabled = 0; |
|
|
|
@ -453,7 +447,7 @@ static int allocate_buf(struct diu_addr *buf, u32 size, u32 bytes_align) |
|
|
|
|
u32 offset, ssize; |
|
|
|
|
u32 mask; |
|
|
|
|
|
|
|
|
|
DPRINTF("Entered: allocate_buf\n"); |
|
|
|
|
debug("Entered: allocate_buf\n"); |
|
|
|
|
ssize = size + bytes_align; |
|
|
|
|
buf->paddr = malloc(ssize); |
|
|
|
|
if (!buf->paddr) |
|
|
|
@ -495,16 +489,16 @@ int fsl_diu_display_bmp(unsigned char *bmp, |
|
|
|
|
bitmap = bmp + raster; |
|
|
|
|
cpp = info->var.bits_per_pixel / 8; |
|
|
|
|
|
|
|
|
|
DPRINTF("bmp = 0x%08x\n", (unsigned int)bmp); |
|
|
|
|
DPRINTF("bitmap = 0x%08x\n", (unsigned int)bitmap); |
|
|
|
|
DPRINTF("width = %d\n", width); |
|
|
|
|
DPRINTF("height = %d\n", height); |
|
|
|
|
DPRINTF("bpp = %d\n", bpp); |
|
|
|
|
DPRINTF("ncolors = %d\n", ncolors); |
|
|
|
|
debug("bmp = 0x%08x\n", (unsigned int)bmp); |
|
|
|
|
debug("bitmap = 0x%08x\n", (unsigned int)bitmap); |
|
|
|
|
debug("width = %d\n", width); |
|
|
|
|
debug("height = %d\n", height); |
|
|
|
|
debug("bpp = %d\n", bpp); |
|
|
|
|
debug("ncolors = %d\n", ncolors); |
|
|
|
|
|
|
|
|
|
DPRINTF("xres = %d\n", info->var.xres); |
|
|
|
|
DPRINTF("yres = %d\n", info->var.yres); |
|
|
|
|
DPRINTF("Screen_base = 0x%x\n", (unsigned int)info->screen_base); |
|
|
|
|
debug("xres = %d\n", info->var.xres); |
|
|
|
|
debug("yres = %d\n", info->var.yres); |
|
|
|
|
debug("Screen_base = 0x%x\n", (unsigned int)info->screen_base); |
|
|
|
|
|
|
|
|
|
if (((width+xoffset) > info->var.xres) || |
|
|
|
|
((height+yoffset) > info->var.yres)) { |
|
|
|
|