DISP_STATUS DISP_Init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { DISP_STATUS r = DISP_STATUS_OK; if (!disp_drv_init_context()) { return DISP_STATUS_NOT_IMPLEMENTED; } // /* power on LCD before config its registers*/ // LCD_CHECK_RET(LCD_Init()); disp_drv_init_ctrl_if(); // For DSI PHY current leakage SW workaround. ///TODO: HOW!!! #if !defined (MTK_HDMI_SUPPORT) if((lcm_params->type!=LCM_TYPE_DSI) && (lcm_params->type!=LCM_TYPE_DPI)){ DSI_PHY_clk_switch(TRUE); DSI_PHY_clk_switch(FALSE); } #endif r = (disp_drv->init) ? (disp_drv->init(fbVA, fbPA, isLcmInited)) : DISP_STATUS_NOT_IMPLEMENTED; return r; }
DISP_STATUS DISP_Init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { if (!disp_drv_init_context()) { return DISP_STATUS_NOT_IMPLEMENTED; } /* power on LCD before config its registers*/ LCD_CHECK_RET(LCD_Init()); disp_drv_init_ctrl_if(); // disp_drv_set_io_driving_current(); return (disp_drv->init) ? (disp_drv->init(fbVA, fbPA, isLcmInited)) : DISP_STATUS_NOT_IMPLEMENTED; }
static BOOL disp_drv_init_context(void) { if (disp_drv != NULL && lcm_drv != NULL){ return TRUE; } disp_drv_init_ctrl_if(); switch(lcm_params->type) { case LCM_TYPE_DBI : disp_drv = DISP_GetDriverDBI(); break; case LCM_TYPE_DPI : disp_drv = DISP_GetDriverDPI(); break; case LCM_TYPE_DSI : disp_drv = DISP_GetDriverDSI(); break; default : ASSERT(0); } if (!disp_drv) return FALSE; return TRUE; }
static BOOL disp_drv_init_context(void) { LCD_STATUS ret; if (disp_drv != NULL && lcm_drv != NULL){ return TRUE; } DISP_DetectDevice(); disp_drv_init_ctrl_if(); disp_drv_set_driving_current(NULL); switch(lcm_params->type) { case LCM_TYPE_DBI : disp_drv = DISP_GetDriverDBI(); break; case LCM_TYPE_DPI : disp_drv = DISP_GetDriverDPI(); break; case LCM_TYPE_DSI : disp_drv = DISP_GetDriverDSI(); break; default : ASSERT(0); } if (!disp_drv) return FALSE; return TRUE; }
LCM_DRIVER *disp_drv_get_lcm_driver(const char* lcm_name) { LCM_DRIVER *lcm = NULL; printf("[LCM Auto Detect], we have %d lcm drivers built in\n", lcm_count); if(lcm_count ==1) { // we need to verify whether the lcm is connected // even there is only one lcm type defined lcm = lcm_driver_list[0]; lcm->set_util_funcs(&lcm_utils); lcm->get_params(&s_lcm_params); lcm_params = &s_lcm_params; lcm_drv = lcm; isLCMFound = TRUE; printf("[LCM Specified]\t[%s]\n", (lcm->name==NULL)?"unknown":lcm->name); goto done; } else { int i; for(i = 0;i < lcm_count;i++) { lcm_params = &s_lcm_params; lcm = lcm_driver_list[i]; printf("[LCM Auto Detect] [%d] - [%s]\t", i, (lcm->name==NULL)?"unknown":lcm->name); lcm->set_util_funcs(&lcm_utils); memset((void*)lcm_params, 0, sizeof(LCM_PARAMS)); lcm->get_params(lcm_params); disp_drv_init_ctrl_if(); disp_drv_set_driving_current(lcm_params); disp_drv_init_io_pad(lcm_params); if(lcm_name != NULL) { if(!strcmp(lcm_name,lcm->name)) { printf("\t\t[success]\n"); isLCMFound = TRUE; lcm_drv = lcm; goto done; } else { printf("\t\t[fail]\n"); } } else { if(LCM_TYPE_DSI == lcm_params->type){ init_dsi(); } if(lcm->compare_id != NULL && lcm->compare_id()) { printf("\t\t[success]\n"); isLCMFound = TRUE; lcm_drv = lcm; goto done; } else { printf("\t\t[fail]\n"); if(LCM_TYPE_DSI == lcm_params->type) DSI_Deinit(); } } } } done: return lcm; }
LCM_DRIVER *disp_drv_get_lcm_driver(const char *lcm_name) { LCM_DRIVER *lcm = NULL; printk("[LCM Auto Detect], we have %d lcm drivers built in\n", lcm_count); printk("[LCM Auto Detect], try to find driver for [%s]\n", (lcm_name==NULL)?"unknown":lcm_name); if(lcm_count ==1) { // we need to verify whether the lcm is connected // even there is only one lcm type defined lcm = lcm_driver_list[0]; lcm->set_util_funcs(&lcm_utils); lcm->get_params(&s_lcm_params); lcm_params = &s_lcm_params; lcm_drv = lcm; disp_drv_init_ctrl_if(); disp_drv_set_driving_current(lcm_params); disp_drv_init_io_pad(lcm_params); if(lcm_drv->compare_id) { if(LCM_TYPE_DSI == lcm_params->type){ init_dsi(FALSE); } if(lcm_drv->compare_id() == TRUE) { printk("[LCM Specified] compare id success\n"); isLCMFound = TRUE; } else { printk("[LCM Specified] compare id fail\n"); printk("%s, lcm is not connected\n", __func__); if(LCM_TYPE_DSI == lcm_params->type) DSI_Deinit(); } } else { printk("[LCM Specified] don't support read deivce id\n"); } printk("[LCM Specified]\t[%s]\n", (lcm->name==NULL)?"unknown":lcm->name); goto done; } else { int i; for(i = 0;i < lcm_count;i++) { lcm_params = &s_lcm_params; lcm = lcm_driver_list[i]; printk("[LCM Auto Detect] [%d] - [%s]\t", i, (lcm->name==NULL)?"unknown":lcm->name); lcm->set_util_funcs(&lcm_utils); memset((void*)lcm_params, 0, sizeof(LCM_PARAMS)); lcm->get_params(lcm_params); disp_drv_init_ctrl_if(); disp_drv_set_driving_current(lcm_params); disp_drv_init_io_pad(lcm_params); if(lcm_name != NULL) { if(!strcmp(lcm_name,lcm->name)) { printk("\t\t[success]\n"); isLCMFound = TRUE; lcm_drv = lcm; goto done; } else { printk("\t\t[fail]\n"); } } else { if(LCM_TYPE_DSI == lcm_params->type){ init_dsi(FALSE); } if(lcm->compare_id != NULL && lcm->compare_id()) { printk("\t\t[success]\n"); isLCMFound = TRUE; lcm_drv = lcm; goto done; } else { if(LCM_TYPE_DSI == lcm_params->type) DSI_Deinit(); printk("\t\t[fail]\n"); } } } #if 1//LK@6575,0319,use the first lcm in the lcm list as default if no lcm detected. lcm = lcm_driver_list[0]; #endif } done: return lcm_drv; }