// protected by sem_flipping, sem_early_suspend, sem_overlay_buffer, sem_update_screen static DISP_STATUS dsi_update_screen(BOOL isMuextLocked) { disp_drv_dsi_init_context(); DSI_CHECK_RET(DSI_enable_MIPI_txio(TRUE)); //DSI_CHECK_RET(DSI_handle_TE()); DSI_SetMode(lcm_params->dsi.mode); #ifndef MT65XX_NEW_DISP LCD_CHECK_RET(LCD_StartTransfer(FALSE, isMuextLocked)); #endif if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE && !DDMS_capturing) { //if(1 != lcm_params->dsi.compatibility_for_nvk) if(1) { DSI_clk_HS_mode(1); } #ifndef MT65XX_NEW_DISP DSI_CHECK_RET(DSI_Start()); #else DSI_CHECK_RET(DSI_StartTransfer(isMuextLocked)); #endif } else if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE && !DDMS_capturing) { DSI_clk_HS_mode(1); #ifndef MT65XX_NEW_DISP DPI_CHECK_RET(DPI_EnableClk()); DSI_CHECK_RET(DSI_Start()); #else DSI_CHECK_RET(DSI_StartTransfer(isMuextLocked)); #endif #ifndef BUILD_UBOOT is_video_mode_running = true; if(lcm_params->dsi.noncont_clock) DSI_set_noncont_clk(true, lcm_params->dsi.noncont_clock_period); if(lcm_params->dsi.lcm_int_te_monitor) DSI_set_int_TE(true, lcm_params->dsi.lcm_int_te_period); #endif } if (DDMS_capturing) DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "[DISP] kernel - dsi_update_screen. DDMS is capturing. Skip one frame. \n"); return DISP_STATUS_OK; }
static void disphal_fbconfig_dsi_post(void) { fbconfig_set_vdo_mode(); //needStartDSI = true; //need ??xk.shi DSI_StartTransfer(true); }
void disp_dsi_post(void) { fbconfig_set_vdo_mode(); needStartDSI = true; DSI_StartTransfer(true); //dsi_update_screen(true); }
UINT32 mt_disp_get_lcd_time(void) { UINT32 time0, time1, lcd_time; mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); if(lcm_params->type==LCM_TYPE_DPI) DPI_WaitVsync(); else if(lcm_params->type==LCM_TYPE_DBI) LCD_WaitForNotBusy(); else if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode!=CMD_MODE) { DSI_WaitVsync(); DSI_WaitVsync(); } time0 = gpt4_tick2time_us(gpt4_get_current_tick()); if(lcm_params->type==LCM_TYPE_DPI) DPI_WaitVsync(); else if(lcm_params->type==LCM_TYPE_DBI){ mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); LCD_WaitForNotBusy(); } else{//DSI if(lcm_params->dsi.mode!=CMD_MODE) DSI_WaitVsync(); else DSI_StartTransfer(TRUE); // DSI_WaitBtaTE(); } time1 = gpt4_tick2time_us(gpt4_get_current_tick()); lcd_time = time1 - time0; printf("Screen Update Costs %d us\n", lcd_time); mt_disp_adjusting_hardware_addr(); if(0 != lcd_time) return (100000000/lcd_time); else return (6000); }
unsigned int disphal_check_lcm(UINT32 color) { unsigned int ret = 0; if(LCM_TYPE_DBI == lcm_params->type){//DBI not support LCD_Check_LCM(color); } else if(LCM_TYPE_DPI == lcm_params->type){//DPI ret = DPI_Check_LCM(); } else if(LCM_TYPE_DSI == lcm_params->type){ //dsi ret = DSI_Check_LCM(color); if(lcm_params->dsi.mode != CMD_MODE){ DSI_SetMode(lcm_params->dsi.mode); DSI_clk_HS_mode(1); DSI_CHECK_RET(DSI_StartTransfer(FALSE)); } } else { printk("DISP_AutoTest():unknown interface\n"); ret = 0; } return ret; }