DISP_STATUS DISP_Deinit(void) { DISP_CHECK_RET(DISP_PanelEnable(FALSE)); DISP_CHECK_RET(DISP_PowerEnable(FALSE)); return DISP_STATUS_OK; }
DAL_STATUS DAL_Printf(const char *fmt, ...) { va_list args; uint i; char printbuffer[1024] = ""; if (NULL == mfc_handle) return DAL_STATUS_NOT_READY; if (NULL == fmt) return DAL_STATUS_INVALID_ARGUMENT; DAL_LOCK(); va_start (args, fmt); i = vsprintf(printbuffer, fmt, args); va_end (args); MFC_CHECK_RET(MFC_Print(mfc_handle, printbuffer)); if (!dal_shown) { LCD_CHECK_RET(LCD_LayerEnable(ASSERT_LAYER, TRUE)); dal_shown = TRUE; } flush_cache_all(); DISP_CHECK_RET(DISP_UpdateScreen(0, 0, DAL_WIDTH, DAL_HEIGHT)); DAL_UNLOCK(); return DAL_STATUS_OK; }
void mt_disp_init(void *lcdbase) { // TODO: Fixit!!!!! //workaround for video mode //if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode!=CMD_MODE) // return; unsigned int lcm_fake_width = 0; unsigned int lcm_fake_height = 0; void *boot_mode_addr = 0; fb_size = ALIGN_TO(CFG_DISPLAY_WIDTH, MTK_FB_ALIGNMENT) * ALIGN_TO(CFG_DISPLAY_HEIGHT, MTK_FB_ALIGNMENT) * 32 / 8; boot_mode_addr = (void *)((UINT32)lcdbase + fb_size); logo_db_addr = (void *)((UINT32)lcdbase - 4 * 1024 * 1024); // fb_addr = (void *)((UINT32)lcdbase + fb_size); fb_addr = lcdbase; fb_offset_logo = 3; ///for debug prupose disp_log_enable(1); dbi_log_enable(1); mt_disp_parse_dfo_setting(); if((0 == mt_disp_get_dfo_setting("LCM_FAKE_WIDTH", &lcm_fake_width)) && (0 == mt_disp_get_dfo_setting("LCM_FAKE_HEIGHT", &lcm_fake_height))) { if(DISP_STATUS_OK != DISP_Change_LCM_Resolution(lcm_fake_width, lcm_fake_height)) { dprintf(INFO,"[DISP_DFO]WARNING!!! Change LCM Resolution FAILED!!!\n"); } } DISP_CHECK_RET(DISP_Init((UINT32)lcdbase, (UINT32)lcdbase, FALSE)); memset((void*)lcdbase, 0x0, DISP_GetVRamSize()); /* transparent front buffer for fb_console display */ #if 1 LCD_CHECK_RET(LCD_LayerEnable(FB_LAYER, TRUE)); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER, (UINT32)boot_mode_addr)); LCD_CHECK_RET(LCD_LayerSetFormat(FB_LAYER, LCD_LAYER_FORMAT_RGB565)); LCD_CHECK_RET(LCD_LayerSetPitch(FB_LAYER, CFG_DISPLAY_WIDTH*2/*ALIGN_TO(CFG_DISPLAY_WIDTH,MTK_FB_ALIGNMENT)*2*/)); LCD_CHECK_RET(LCD_LayerSetOffset(FB_LAYER, 0, 0)); LCD_CHECK_RET(LCD_LayerSetSize(FB_LAYER, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT)); LCD_CHECK_RET(LCD_LayerSetSourceColorKey(FB_LAYER, TRUE, 0xff000000)); #endif /* background buffer for uboot logo display */ LCD_CHECK_RET(LCD_LayerEnable(FB_LAYER - 1, TRUE)); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER - 1, (UINT32)fb_addr)); LCD_CHECK_RET(LCD_LayerSetFormat(FB_LAYER - 1, LCD_LAYER_FORMAT_RGB565)); LCD_CHECK_RET(LCD_LayerSetOffset(FB_LAYER - 1, 0, 0)); LCD_CHECK_RET(LCD_LayerSetSize(FB_LAYER - 1, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT)); LCD_CHECK_RET(LCD_LayerSetPitch(FB_LAYER - 1, ALIGN_TO(CFG_DISPLAY_WIDTH, MTK_FB_ALIGNMENT)*2)); #if 0 if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)) { LCD_CHECK_RET(LCD_LayerSetRotation(FB_LAYER, LCD_LAYER_ROTATE_180)); LCD_CHECK_RET(LCD_LayerSetRotation(FB_LAYER - 1, LCD_LAYER_ROTATE_180)); } #endif }
void mt_disp_update(UINT32 x, UINT32 y, UINT32 width, UINT32 height) { if(fb_isdirty) { fb_isdirty = 0; disp_regupdate_interrupt_clean(); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER - 1, (UINT32)fb_addr + fb_offset_logo * fb_size)); printk("[wwy] hardware address = %x, fb_offset_logo = %d\n",(UINT32)fb_addr + fb_offset_logo * fb_size,fb_offset_logo); DISP_CHECK_RET(DISP_UpdateScreen(x, y, width, height)); //wait reg update to set fb_offset_logo DISP_WaitRegUpdate(); fb_offset_logo = fb_offset_logo ? 0 : 3; } else { DISP_CHECK_RET(DISP_UpdateScreen(x, y, width, height)); } }
void mt_disp_update(UINT32 x, UINT32 y, UINT32 width, UINT32 height) { if(fb_isdirty) { fb_isdirty = 0; MASKREG32(DISP_REG_CONFIG_MUTEX_INTEN, 0x1, 0x1); //Enable DISP MUTEX0 MASKREG32(DISP_REG_CONFIG_MUTEX_INTSTA, 0x1, 0x0); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER - 1, (UINT32)fb_addr + fb_offset_logo * fb_size)); printf("[wwy] hardware address = %x, fb_offset_logo = %d\n",(UINT32)fb_addr + fb_offset_logo * fb_size,fb_offset_logo); DISP_CHECK_RET(DISP_UpdateScreen(x, y, width, height)); //wait reg update to set fb_offset_logo DISP_WaitRegUpdate(); fb_offset_logo = fb_offset_logo ? 0 : 3; } else { DISP_CHECK_RET(DISP_UpdateScreen(x, y, width, height)); } }
void mt_disp_init(void *lcdbase) { UINT32 boot_mode_addr = 0; fb_size = ALIGN_TO(CFG_DISPLAY_WIDTH, MTK_FB_ALIGNMENT) * ALIGN_TO(CFG_DISPLAY_HEIGHT, MTK_FB_ALIGNMENT) * CFG_DISPLAY_BPP / 8; boot_mode_addr = (UINT32)((UINT32)lcdbase + fb_size); logo_db_addr = (void *)((UINT32)lcdbase - 4 * 1024 * 1024); // fb_addr = (void *)((UINT32)lcdbase + fb_size); fb_addr = lcdbase; fb_offset_logo = 3; #if 0 ///for debug prupose disp_log_enable(1); dbi_log_enable(1); #endif DISP_CHECK_RET(DISP_Init((UINT32)lcdbase, (UINT32)lcdbase, FALSE)); memset((void*)lcdbase, 0x0, DISP_GetVRamSize()); /* transparent front buffer for fb_console display */ #if 1 LCD_CHECK_RET(LCD_LayerEnable(FB_LAYER, TRUE)); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER, (UINT32)boot_mode_addr)); LCD_CHECK_RET(LCD_LayerSetFormat(FB_LAYER, LCD_LAYER_FORMAT_RGB565)); LCD_CHECK_RET(LCD_LayerSetPitch(FB_LAYER, CFG_DISPLAY_WIDTH*2)); LCD_CHECK_RET(LCD_LayerSetOffset(FB_LAYER, 0, 0)); LCD_CHECK_RET(LCD_LayerSetSize(FB_LAYER, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT)); LCD_CHECK_RET(LCD_LayerSetSourceColorKey(FB_LAYER, TRUE, 0xff000000)); #endif /* background buffer for uboot logo display */ LCD_CHECK_RET(LCD_LayerEnable(FB_LAYER - 1, TRUE)); LCD_CHECK_RET(LCD_LayerSetAddress(FB_LAYER - 1, (UINT32)fb_addr)); LCD_CHECK_RET(LCD_LayerSetFormat(FB_LAYER - 1, LCD_LAYER_FORMAT_RGB565)); LCD_CHECK_RET(LCD_LayerSetOffset(FB_LAYER - 1, 0, 0)); LCD_CHECK_RET(LCD_LayerSetSize(FB_LAYER - 1, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT)); LCD_CHECK_RET(LCD_LayerSetPitch(FB_LAYER - 1, ALIGN_TO(CFG_DISPLAY_WIDTH, MTK_FB_ALIGNMENT) * 2)); if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)) { LCD_CHECK_RET(LCD_LayerSetRotation(FB_LAYER, LCD_LAYER_ROTATE_180)); LCD_CHECK_RET(LCD_LayerSetRotation(FB_LAYER - 1, LCD_LAYER_ROTATE_180)); } }
void mt65xx_disp_update(UINT32 x, UINT32 y, UINT32 width, UINT32 height) { DISP_CHECK_RET(DISP_UpdateScreen(x, y, width, height)); }