static void init_lcd_te_control(void) { const LCM_DBI_PARAMS *dbi = &(lcm_params->dbi); LCD_CHECK_RET(LCD_TE_Enable(FALSE)); if(!DISP_IsLcmFound()) return; #ifdef BUILD_UBOOT { extern BOOTMODE g_boot_mode; printf("boot_mode = %d\n",g_boot_mode); if(g_boot_mode == META_BOOT) return; } #endif if (LCM_DBI_TE_MODE_DISABLED == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_Enable(FALSE)); return; } if (LCM_DBI_TE_MODE_VSYNC_ONLY == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY)); } else if (LCM_DBI_TE_MODE_VSYNC_OR_HSYNC == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_OR_HSYNC)); LCD_CHECK_RET(LCD_TE_ConfigVHSyncMode(dbi->te_hs_delay_cnt, dbi->te_vs_width_cnt, (LCD_TE_VS_WIDTH_CNT_DIV)dbi->te_vs_width_cnt_div)); } else ASSERT(0); LCD_CHECK_RET(LCD_TE_SetEdgePolarity(dbi->te_edge_polarity)); LCD_CHECK_RET(LCD_TE_Enable(TRUE)); }
static void init_lcd_te_control(void) { const LCM_DBI_PARAMS *dbi = &(lcm_params->dbi); /* The board may not connect to LCM in META test mode, force disalbe TE to avoid blocked in LCD controller */ /* but for uboot, the boot mode selection is done after lcd init, so we have to disable te always in uboot. */ LCD_CHECK_RET(LCD_TE_Enable(FALSE)); if (!DISP_IsLcmFound()) return; if (LCM_DBI_TE_MODE_DISABLED == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_Enable(FALSE)); return; } if (LCM_DBI_TE_MODE_VSYNC_ONLY == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY)); } else if (LCM_DBI_TE_MODE_VSYNC_OR_HSYNC == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_OR_HSYNC)); LCD_CHECK_RET(LCD_TE_ConfigVHSyncMode(dbi->te_hs_delay_cnt, dbi->te_vs_width_cnt, (LCD_TE_VS_WIDTH_CNT_DIV) dbi->te_vs_width_cnt_div)); } else ASSERT(0); LCD_CHECK_RET(LCD_TE_SetEdgePolarity(dbi->te_edge_polarity)); LCD_CHECK_RET(LCD_TE_Enable(TRUE)); }
static void init_lcd_te_control(void) { const LCM_DBI_PARAMS *dbi = &(lcm_params->dbi); LCD_CHECK_RET(LCD_TE_Enable(FALSE)); if (LCM_DBI_TE_MODE_DISABLED == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_Enable(FALSE)); return; } if (LCM_DBI_TE_MODE_VSYNC_ONLY == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY)); } else if (LCM_DBI_TE_MODE_VSYNC_OR_HSYNC == dbi->te_mode) { LCD_CHECK_RET(LCD_TE_SetMode(LCD_TE_MODE_VSYNC_OR_HSYNC)); LCD_CHECK_RET(LCD_TE_ConfigVHSyncMode(dbi->te_hs_delay_cnt, dbi->te_vs_width_cnt, (LCD_TE_VS_WIDTH_CNT_DIV)dbi->te_vs_width_cnt_div)); } else ASSERT(0); LCD_CHECK_RET(LCD_TE_SetEdgePolarity(dbi->te_edge_polarity)); LCD_CHECK_RET(LCD_TE_Enable(TRUE)); }
DISP_STATUS DISP_ConfigImmediateUpdate(BOOL enable) { disp_drv_init_context(); if(enable == TRUE) { LCD_TE_Enable(FALSE); } else { if(disp_drv->init_te_control) disp_drv->init_te_control(); else return DISP_STATUS_NOT_IMPLEMENTED; } is_immediateupdate = enable; return DISP_STATUS_OK; }
int disphal_enable_te(BOOL enable) { LCD_TE_Enable(enable); return 0; }
int disphal_process_dbg_opt(const char *opt) { if (0 == strncmp(opt, "dbi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { LCD_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { LCD_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "dpi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DPI_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { DPI_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "dsi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DSI_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { DSI_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "te:", 3)) { if (0 == strncmp(opt + 3, "on", 2)) { if (DSI_Get_EXT_TE()) { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "EXT TE is enabled, can not enable BTA TE now\n"); } else { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "Before: BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); LCD_TE_Enable(TRUE); DSI_TE_Enable(TRUE); //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "After : BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); } } else if (0 == strncmp(opt + 3, "off", 3)) { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "Before: BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); LCD_TE_Enable(FALSE); DSI_TE_Enable(FALSE); //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "After : BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); } else { goto Error; } } else if (0 == strncmp(opt, "te_ext:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { if (DSI_Get_BTA_TE()) { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "BTA TE is enabled, can not enable EXT TE now\n"); } else { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "Before: BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); LCD_TE_Enable(TRUE); DSI_TE_EXT_Enable(TRUE); //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "After : BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); } } else if (0 == strncmp(opt + 7, "off", 3)) { //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "Before: BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); LCD_TE_Enable(FALSE); DSI_TE_EXT_Enable(FALSE); //DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "After : BTA_TE = %d, EXT_TE = %d\n", DSI_Get_BTA_TE(),DSI_Get_EXT_TE()); } else { goto Error; } } else if (0 == strncmp(opt, "reg:", 4)) { if (0 == strncmp(opt + 4, "dpi", 3)) { DPI_DumpRegisters(); } else if (0 == strncmp(opt + 4, "dsi", 3)) { DSI_DumpRegisters(); } else { goto Error; } } else if (0 == strncmp(opt, "lcdlog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { dbi_log_enable(true); } else if (0 == strncmp(opt + 7, "off", 3)) { dbi_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "dsilog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { DSI_Enable_Log(true); } else if (0 == strncmp(opt + 7, "off", 3)) { DSI_Enable_Log(false); } else { goto Error; } } else if (0 == strncmp(opt, "dpilog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { //dpi_log_enable(true); } else if (0 == strncmp(opt + 7, "off", 3)) { //dpi_log_enable(false); } else { goto Error; } } else goto Error; return 0; Error: return -1; }
static DISP_STATUS dsi_init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { if (!disp_drv_dsi_init_context()) return DISP_STATUS_NOT_IMPLEMENTED; if(lcm_params->dsi.mode == CMD_MODE) { init_lcd(); init_dsi(isLcmInited); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); } DSI_clk_HS_mode(0); DSI_SetMode(lcm_params->dsi.mode); DPI_PowerOn(); DPI_PowerOff(); init_lcd_te_control(); } else { #ifndef BUILD_UBOOT spin_lock(&g_handle_esd_lock); #endif init_intermediate_buffers(fbPA); init_lcd(); init_dpi(isLcmInited); init_dsi(isLcmInited); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); } DSI_SetMode(lcm_params->dsi.mode); #ifndef BUILD_UBOOT if(lcm_params->dsi.lcm_ext_te_monitor) { dsi_vdo_streaming = false; LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY); LCD_TE_SetEdgePolarity(LCM_POLARITY_RISING); LCD_TE_Enable(FALSE); } if(lcm_params->dsi.noncont_clock) DSI_set_noncont_clk(false, lcm_params->dsi.noncont_clock_period); if(lcm_params->dsi.lcm_int_te_monitor) DSI_set_int_TE(false, lcm_params->dsi.lcm_int_te_period); spin_unlock(&g_handle_esd_lock); #endif } return DISP_STATUS_OK; }
static DISP_STATUS dsi_init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if (!disp_drv_dsi_init_context()) return DISP_STATUS_NOT_IMPLEMENTED; // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if(lcm_params->dsi.mode == CMD_MODE) { #ifndef MT65XX_NEW_DISP init_lcd(); #endif init_dsi(isLcmInited); mdelay(1); // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); #ifndef MT65XX_NEW_DISP DSI_clk_HS_mode(0); #else DSI_clk_HS_mode(1); #endif // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); DSI_SetMode(lcm_params->dsi.mode); #ifndef MT65XX_NEW_DISP init_lcd_te_control(); #endif } else { #ifndef MT65XX_NEW_DISP init_intermediate_buffers(fbPA); init_lcd(); init_dpi(isLcmInited); #endif if (!isLcmInited) { DSI_SetMode(0); mdelay(100); DSI_Stop(); } else { is_video_mode_running = true; } init_dsi(isLcmInited); mdelay(1); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } DSI_SetMode(lcm_params->dsi.mode); #ifndef BUILD_UBOOT if(lcm_params->dsi.lcm_ext_te_monitor) { is_video_mode_running = false; LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY); LCD_TE_SetEdgePolarity(LCM_POLARITY_RISING); LCD_TE_Enable(FALSE); } if(lcm_params->dsi.noncont_clock) DSI_set_noncont_clk(false, lcm_params->dsi.noncont_clock_period); if(lcm_params->dsi.lcm_int_te_monitor) DSI_set_int_TE(false, lcm_params->dsi.lcm_int_te_period); #endif } #ifdef MT65XX_NEW_DISP { struct disp_path_config_struct config = {0}; config.srcModule = DISP_MODULE_OVL; config.bgROI.x = 0; config.bgROI.y = 0; config.bgROI.width = DISP_GetScreenWidth(); config.bgROI.height = DISP_GetScreenHeight(); config.bgColor = 0x0; // background color config.pitch = ALIGN_TO(DISP_GetScreenWidth(),32)*2; config.srcROI.x = 0;config.srcROI.y = 0; config.srcROI.height= DISP_GetScreenHeight(); config.srcROI.width= DISP_GetScreenWidth(); config.ovl_config.source = OVL_LAYER_SOURCE_MEM; config.ovl_config.layer = FB_LAYER; config.ovl_config.layer_en = 1; config.ovl_config.fmt = OVL_INPUT_FORMAT_RGB565; config.ovl_config.addr = fbPA; config.ovl_config.vaddr = fbVA; config.ovl_config.source = OVL_LAYER_SOURCE_MEM; config.ovl_config.src_x = 0; config.ovl_config.src_y = 0; config.ovl_config.src_w = DISP_GetScreenWidth(); config.ovl_config.src_h = DISP_GetScreenHeight(); config.ovl_config.dst_x = 0; // ROI config.ovl_config.dst_y = 0; config.ovl_config.dst_w = DISP_GetScreenWidth(); config.ovl_config.dst_h = DISP_GetScreenHeight(); config.ovl_config.src_pitch = ALIGN_TO(DISP_GetScreenWidth(),32)*2; //pixel number config.ovl_config.keyEn = 0; config.ovl_config.key = 0xFF; // color key config.ovl_config.aen = 0; // alpha enable config.ovl_config.alpha = 0; if(lcm_params->dsi.mode == CMD_MODE) config.dstModule = DISP_MODULE_DSI_CMD;// DISP_MODULE_WDMA1 else config.dstModule = DISP_MODULE_DSI_VDO;// DISP_MODULE_WDMA1 config.outFormat = RDMA_OUTPUT_FORMAT_ARGB; LCD_LayerSetAddress(FB_LAYER, fbPA); LCD_LayerSetFormat(FB_LAYER, LCD_LAYER_FORMAT_RGB565); LCD_LayerSetOffset(FB_LAYER, 0, 0); LCD_LayerSetSize(FB_LAYER,DISP_GetScreenWidth(),DISP_GetScreenHeight()); LCD_LayerSetPitch(FB_LAYER, ALIGN_TO(DISP_GetScreenWidth(),32) * 2); LCD_LayerEnable(FB_LAYER, TRUE); #if defined(MTK_M4U_EXT_PAGE_TABLE) if(lcm_params->dsi.mode != CMD_MODE) { DSI_Wait_VDO_Idle(); disp_path_get_mutex(); } disp_path_config(&config); #if 1 // Config FB_Layer port to be physical. { M4U_PORT_STRUCT portStruct; portStruct.ePortID = M4U_PORT_LCD_OVL; //hardware port ID, defined in M4U_PORT_ID_ENUM portStruct.Virtuality = 1; portStruct.Security = 0; portStruct.domain = 3; //domain : 0 1 2 3 portStruct.Distance = 1; portStruct.Direction = 0; m4u_config_port(&portStruct); } // hook m4u debug callback function m4u_set_tf_callback(M4U_CLNTMOD_DISP, &disp_m4u_dump_reg); #endif if(lcm_params->dsi.mode != CMD_MODE) { disp_path_release_mutex(); DSI_Start(); } #else if(lcm_params->dsi.mode != CMD_MODE){ #define TIMECNT 1000000 unsigned int reg1 = 0, reg2 = 0, reg3 = 0; unsigned int timeout_cnt = 0; unsigned int irq_mask; // dump before modification printk("[DISP] pa:0x%x, va:0x%x \n", fbPA, fbVA); // enable frame done interrupt disp_path_get_mutex(); OVLEnableIrq(0x2); disp_path_release_mutex(); while (timeout_cnt < TIMECNT) { reg1 = DISP_REG_GET(DISP_REG_OVL_INTSTA); reg2 = DISP_REG_GET(DISP_REG_OVL_STA); // frame done interrupt if (((reg1 & 0x2) == 0x2) && ((reg2 & 0x1) == 0x0)) { DISP_REG_SET(DISP_REG_OVL_INTSTA, ~reg1); local_irq_save(irq_mask); disp_path_get_mutex(); disp_path_config(&config); disp_path_release_mutex(); #if 1 // defined(MTK_M4U_SUPPORT) { M4U_PORT_STRUCT portStruct; portStruct.ePortID = M4U_PORT_LCD_OVL; //hardware port ID, defined in M4U_PORT_ID_ENUM portStruct.Virtuality = 1; portStruct.Security = 0; portStruct.domain = 3; //domain : 0 1 2 3 portStruct.Distance = 1; portStruct.Direction = 0; m4u_config_port(&portStruct); } // hook m4u debug callback function m4u_set_tf_callback(M4U_CLNTMOD_DISP, &disp_m4u_dump_reg); #endif local_irq_restore(irq_mask); break; } timeout_cnt++; } // sw timeout if (timeout_cnt >= TIMECNT) { printk("[DISP] timeout:%d \n", timeout_cnt); ASSERT(0); } // dump after modification printk("[DISP] cnt:%d \n", timeout_cnt); } else { disp_path_config(&config); #if 1 // defined(MTK_M4U_SUPPORT) { M4U_PORT_STRUCT portStruct; portStruct.ePortID = M4U_PORT_LCD_OVL; //hardware port ID, defined in M4U_PORT_ID_ENUM portStruct.Virtuality = 1; portStruct.Security = 0; portStruct.domain = 3; //domain : 0 1 2 3 portStruct.Distance = 1; portStruct.Direction = 0; m4u_config_port(&portStruct); } // hook m4u debug callback function m4u_set_tf_callback(M4U_CLNTMOD_DISP, &disp_m4u_dump_reg); #endif } #endif } #endif printk("%s, config done\n", __func__); return DISP_STATUS_OK; }
static void process_dbg_opt(const char *opt) { if (0 == strncmp(opt, "hdmion", 6)) { hdmi_force_init(); } else if (0 == strncmp(opt, "fps:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { dbg_opt.en_fps_log = 1; } else if (0 == strncmp(opt + 4, "off", 3)) { dbg_opt.en_fps_log = 0; } else { goto Error; } reset_fps_logger(); } else if (0 == strncmp(opt, "tl:", 3)) { if (0 == strncmp(opt + 3, "on", 2)) { dbg_opt.en_touch_latency_log = 1; } else if (0 == strncmp(opt + 3, "off", 3)) { dbg_opt.en_touch_latency_log = 0; } else { goto Error; } } else if (0 == strncmp(opt, "black", 5)) { mtkfb_clear_lcm(); } else if (0 == strncmp(opt, "suspend", 4)) { DISP_PanelEnable(FALSE); DISP_PowerEnable(FALSE); } else if (0 == strncmp(opt, "resume", 4)) { DISP_PowerEnable(TRUE); DISP_PanelEnable(TRUE); } else if (0 == strncmp(opt, "lcm:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DISP_PanelEnable(TRUE); } else if (0 == strncmp(opt + 4, "off", 3)) { DISP_PanelEnable(FALSE); } else if (0 == strncmp(opt + 4, "init", 4)) { if (NULL != lcm_drv && NULL != lcm_drv->init) { lcm_drv->init(); } }else { goto Error; } } else if (0 == strncmp(opt, "cabc:", 5)) { if (0 == strncmp(opt + 5, "ui", 2)) { mtkfb_set_backlight_mode(1); }else if (0 == strncmp(opt + 5, "mov", 3)) { mtkfb_set_backlight_mode(3); }else if (0 == strncmp(opt + 5, "still", 5)) { mtkfb_set_backlight_mode(2); }else { goto Error; } } else if (0 == strncmp(opt, "lcd:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DISP_PowerEnable(TRUE); } else if (0 == strncmp(opt + 4, "off", 3)) { DISP_PowerEnable(FALSE); } else { goto Error; } } else if (0 == strncmp(opt, "dbi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { LCD_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { LCD_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "dpi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DPI_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { DPI_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "dsi:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { DSI_PowerOn(); } else if (0 == strncmp(opt + 4, "off", 3)) { DSI_PowerOff(); } else { goto Error; } } else if (0 == strncmp(opt, "te:", 3)) { if (0 == strncmp(opt + 3, "on", 2)) { LCD_TE_Enable(TRUE); DSI_TE_Enable(TRUE); } else if (0 == strncmp(opt + 3, "off", 3)) { LCD_TE_Enable(FALSE); DSI_TE_Enable(FALSE); } else { goto Error; } } else if (0 == strncmp(opt, "vsynclog:", 9)) { if (0 == strncmp(opt + 9, "on", 2)) { EnableVSyncLog = 1; } else if (0 == strncmp(opt + 9, "off", 3)) { EnableVSyncLog = 0; } else { goto Error; } } else if (0 == strncmp(opt, "layer", 5)) { dump_lcd_layer_info(); } else if (0 == strncmp(opt, "reg:", 4)) { if (0 == strncmp(opt + 4, "lcd", 3)) { LCD_DumpRegisters(); }else if (0 == strncmp(opt + 4, "dpi1", 4)) { DPI1_DumpRegisters(); }else if (0 == strncmp(opt + 4, "dpi", 3)) { DPI_DumpRegisters(); } else if (0 == strncmp(opt + 4, "dsi", 3)) { DSI_DumpRegisters(); #if defined(MTK_TVOUT_SUPPORT) } else if (0 == strncmp(opt + 4, "tvc", 3)) { TVC_DumpRegisters(); } else if (0 == strncmp(opt + 4, "tve", 3)) { TVE_DumpRegisters(); } else if (0 == strncmp(opt + 4, "tvr", 3)) { TVR_DumpRegisters(); #endif } else { goto Error; } } #if defined(MTK_TVOUT_SUPPORT) else if (0 == strncmp(opt, "tv:", 3)) { if (0 == strncmp(opt + 3, "on", 2)) { TVOUT_TvCablePlugIn(); } else if (0 == strncmp(opt +3, "off", 3)) { TVOUT_TvCablePlugOut(); } else { goto Error; } } else if (0 == strncmp(opt, "tvforce:", 8)) { if (0 == strncmp(opt + 8, "on", 2)) { TVOUT_TvCablePlugIn_Directly(); } else if (0 == strncmp(opt +8, "off", 3)) { TVOUT_TvCablePlugOut_Directly(); } else { goto Error; } } else if (0 == strncmp(opt, "tvsys:", 6)) { if (0 == strncmp(opt + 6, "ntsc", 4)) { TVOUT_SetTvSystem(TVOUT_SYSTEM_NTSC); } else if (0 == strncmp(opt + 6, "pal", 3)) { TVOUT_SetTvSystem(TVOUT_SYSTEM_PAL); } else { goto Error; } } else if (0 == strncmp(opt, "tvrot:", 6)) { if (0 == strncmp(opt + 6, "on", 2)) { TVOUT_SetOrientation(TVOUT_ROT_270); } else if (0 == strncmp(opt + 6, "off", 3)) { TVOUT_SetOrientation(TVOUT_ROT_0); } else { goto Error; } } else if (0 == strncmp(opt, "tvcb:", 5)) { if (0 == strncmp(opt + 5, "on", 2)) { TVOUT_EnableColorBar(TRUE); } else if (0 == strncmp(opt + 5, "off", 3)) { TVOUT_EnableColorBar(FALSE); } else { goto Error; } } else if (0 == strncmp(opt, "tvvm:", 5)) { if (0 == strncmp(opt + 5, "on", 2)) { TVOUT_DisableVideoMode(false); } else if (0 == strncmp(opt + 5, "off", 3)) { TVOUT_DisableVideoMode(true); } else { goto Error; } } else if (0 == strncmp(opt, "tvlog:", 6)) { if (0 == strncmp(opt + 6, "on", 2)) { TVOUT_EnableLog(true); } else if (0 == strncmp(opt + 6, "off", 3)) { TVOUT_EnableLog(false); } else { goto Error; } } else if (0 == strncmp(opt, "tvtime:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { TVOUT_EnableTimeProfiling(true); } else if (0 == strncmp(opt + 7, "off", 3)) { TVOUT_EnableTimeProfiling(false); } else { goto Error; } } else if (0 == strncmp(opt, "tvcap:", 6)) { if (0 == strncmp(opt + 6, "on", 2)) { capture_tv_buffer = true; } else if (0 == strncmp(opt + 6, "off", 3)) { capture_tv_buffer = false; } else { goto Error; } } else if (0 == strncmp(opt, "tvcam:", 6)) { if (0 == strncmp(opt + 6, "on", 2)) { TVOUT_ForceClose(); } else if (0 == strncmp(opt + 6, "off", 3)) { TVOUT_RestoreOpen(); } else { goto Error; } } else if (0 == strncmp(opt, "tvuser:"******"on", 2)) { TVOUT_TurnOn(true); } else if (0 == strncmp(opt + 7, "off", 3)) { TVOUT_TurnOn(false); } else { goto Error; } } else if (0 == strncmp(opt, "tvcoffset:", 10)) { char *p = (char *)opt + 10; unsigned long offset = simple_strtoul(p, &p, 10); TVC_SetCheckLineOffset(offset); } #endif else if (0 == strncmp(opt, "regw:", 5)) { char *p = (char *)opt + 5; unsigned long addr = simple_strtoul(p, &p, 16); unsigned long val = simple_strtoul(p + 1, &p, 16); if (addr) { OUTREG32(addr, val); } else { goto Error; } } else if (0 == strncmp(opt, "regr:", 5)) { char *p = (char *)opt + 5; unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16); if (addr) { DISP_LOG_PRINT(ANDROID_LOG_INFO, "DBG", "Read register 0x%08x: 0x%08x\n", addr, INREG32(addr)); } else { goto Error; } } else if(0 == strncmp(opt, "bkl:", 4)) { char *p = (char *)opt + 4; unsigned int level = (unsigned int) simple_strtoul(p, &p, 10); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DBG", "process_dbg_opt(), set backlight level = %d\n", level); DISP_SetBacklight(level); } else if(0 == strncmp(opt, "dither:", 7)) { unsigned lrs, lgs, lbs, dbr, dbg, dbb; char *p = (char *)opt + 7; lrs = (unsigned int) simple_strtoul(p, &p, 16); p++; lgs = (unsigned int) simple_strtoul(p, &p, 16); p++; lbs = (unsigned int) simple_strtoul(p, &p, 16); p++; dbr = (unsigned int) simple_strtoul(p, &p, 16); p++; dbg = (unsigned int) simple_strtoul(p, &p, 16); p++; dbb = (unsigned int) simple_strtoul(p, &p, 16); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DBG", "process_dbg_opt(), %d %d %d %d %d %d\n", lrs, lgs, lbs, dbr, dbg, dbb); #if 0 //defined(CONFIG_ARCH_MT6573) LCD_WaitForNotBusy(); LCD_ConfigDither(lrs, lgs, lbs, dbr, dbg, dbb); LCD_StartTransfer(true); #endif } else if (0 == strncmp(opt, "mtkfblog:", 9)) { if (0 == strncmp(opt + 9, "on", 2)) { mtkfb_log_enable(true); } else if (0 == strncmp(opt + 9, "off", 3)) { mtkfb_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "displog:", 8)) { if (0 == strncmp(opt + 8, "on", 2)) { disp_log_enable(true); } else if (0 == strncmp(opt + 8, "off", 3)) { disp_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "lcdlog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { dbi_log_enable(true); } else if (0 == strncmp(opt + 7, "off", 3)) { dbi_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "dsilog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { DSI_Enable_Log(true); } else if (0 == strncmp(opt + 7, "off", 3)) { DSI_Enable_Log(false); } else { goto Error; } } else if (0 == strncmp(opt, "glitchlog:", 10)) { if (0 == strncmp(opt + 10, "on", 2)) { Glitch_Enable_Log(true); } else if (0 == strncmp(opt + 10, "off", 3)) { Glitch_Enable_Log(false); } else { goto Error; } } else if(0 == strncmp(opt, "glitch_times:", 13)) { char *p = (char *)opt + 13; unsigned int level = (unsigned int) simple_strtoul(p, &p, 10); Glitch_times(level); } else if (0 == strncmp(opt, "mtkfb_vsynclog:", 15)) { if (0 == strncmp(opt + 15, "on", 2)) { mtkfb_vsync_log_enable(true); } else if (0 == strncmp(opt + 15, "off", 3)) { mtkfb_vsync_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "dpilog:", 7)) { if (0 == strncmp(opt + 7, "on", 2)) { //dpi_log_enable(true); } else if (0 == strncmp(opt + 7, "off", 3)) { //dpi_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "log:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { mtkfb_log_enable(true); disp_log_enable(true); dbi_log_enable(true); //dpi_log_enable(true); } else if (0 == strncmp(opt + 4, "off", 3)) { mtkfb_log_enable(false); disp_log_enable(false); dbi_log_enable(false); //dpi_log_enable(false); } else { goto Error; } } else if (0 == strncmp(opt, "update", 6)) { DISP_UpdateScreen(0, 0, DISP_GetScreenWidth(), DISP_GetScreenHeight()); } else if (0 == strncmp(opt, "pan_disp", 8)) { mtkfb_pan_disp_test(); } else if (0 == strncmp(opt, "sem_cnt", 7)) { mtkfb_show_sem_cnt(); LCD_GetVsyncCnt(); } else if (0 == strncmp(opt, "hang:", 5)) { if (0 == strncmp(opt + 5, "on", 2)) { mtkfb_hang_test(true); } else if (0 == strncmp(opt + 5, "off", 3)) { mtkfb_hang_test(false); } else{ goto Error; } } #if defined(MTK_M4U_SUPPORT) else if (0 == strncmp(opt, "m4u:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { mtkfb_m4u_switch(true); } else if (0 == strncmp(opt + 4, "off", 3)) { mtkfb_m4u_switch(false); } else if (0 == strncmp(opt + 4, "dump", 4)) { mtkfb_m4u_dump(); } else{ goto Error; } } #endif else if (0 == strncmp(opt, "cpfbonly:", 9)) { if (0 == strncmp(opt + 9, "on", 2)) { mtkfb_capture_fb_only(true); } else if (0 == strncmp(opt + 9, "off", 3)) { mtkfb_capture_fb_only(false); } } else if (0 == strncmp(opt, "esd:", 4)) { if (0 == strncmp(opt + 4, "on", 2)) { esd_recovery_pause(FALSE); } else if (0 == strncmp(opt + 4, "off", 3)) { esd_recovery_pause(TRUE); } } else if (0 == strncmp(opt, "HQA:", 4)) { if (0 == strncmp(opt + 4, "NormalToFactory", 15)) { mtkfb_switch_normal_to_factory(); } else if (0 == strncmp(opt + 4, "FactoryToNormal", 15)) { mtkfb_switch_factory_to_normal(); } } else if (0 == strncmp(opt, "mmp", 3)) { init_mtkfb_mmp_events(); } else if (0 == strncmp(opt, "dump_layer:", 11)) { if (0 == strncmp(opt + 11, "on", 2)) { char *p = (char *)opt + 14; gCaptureLayerDownX = simple_strtoul(p, &p, 10); gCaptureLayerDownY = simple_strtoul(p+1, &p, 10); gCaptureLayerEnable = 1; } else if (0 == strncmp(opt + 11, "off", 3)) { gCaptureLayerEnable = 0; } } else if (0 == strncmp(opt, "dump_ovl:", 9)) { if (0 == strncmp(opt + 9, "on", 2)) { char *p = (char *)opt + 12; gCaptureOvlDownX = simple_strtoul(p, &p, 10); gCaptureOvlDownY = simple_strtoul(p+1, &p, 10); gCaptureOvlThreadEnable = 1; wake_up_process(captureovl_task); } else if (0 == strncmp(opt + 9, "off", 3)) { gCaptureOvlThreadEnable = 0; } } else if (0 == strncmp(opt, "dump_fb:", 8)) { if (0 == strncmp(opt + 8, "on", 2)) { char *p = (char *)opt + 11; gCaptureFBDownX = simple_strtoul(p, &p, 10); gCaptureFBDownY = simple_strtoul(p+1, &p, 10); gCaptureFBPeriod = simple_strtoul(p+1, &p, 10); gCaptureFBEnable = 1; wake_up_interruptible(&gCaptureFBWQ); } else if (0 == strncmp(opt + 8, "off", 3)) { gCaptureFBEnable = 0; } } else { goto Error; } return; Error: DISP_LOG_PRINT(ANDROID_LOG_INFO, "ERROR", "parse command error!\n\n%s", STR_HELP); }
static DISP_STATUS dsi_init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { if (!disp_drv_dsi_init_context()) return DISP_STATUS_NOT_IMPLEMENTED; if(lcm_params->dsi.mode == CMD_MODE) { #ifndef MT65XX_NEW_DISP init_lcd(); #endif init_dsi(isLcmInited); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } #ifndef MT65XX_NEW_DISP DSI_clk_HS_mode(0); #else DSI_clk_HS_mode(1); #endif DSI_SetMode(lcm_params->dsi.mode); #ifndef MT65XX_NEW_DISP DPI_PowerOn(); DPI_PowerOff(); init_lcd_te_control(); #endif } else { #ifndef MT65XX_NEW_DISP init_intermediate_buffers(fbPA); init_lcd(); init_dpi(isLcmInited); #endif if (!isLcmInited) { DSI_SetMode(0); mdelay(100); DSI_DisableClk(); } else { is_video_mode_running = true; } init_dsi(isLcmInited); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } DSI_SetMode(lcm_params->dsi.mode); #ifndef BUILD_UBOOT #ifndef MT65XX_NEW_DISP if(lcm_params->dsi.lcm_ext_te_monitor) { is_video_mode_running = false; LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY); LCD_TE_SetEdgePolarity(LCM_POLARITY_RISING); LCD_TE_Enable(FALSE); } if(lcm_params->dsi.noncont_clock) DSI_set_noncont_clk(false, lcm_params->dsi.noncont_clock_period); if(lcm_params->dsi.lcm_int_te_monitor) DSI_set_int_TE(false, lcm_params->dsi.lcm_int_te_period); #endif #endif } #ifdef MT65XX_NEW_DISP { struct disp_path_config_struct config = {0}; config.srcModule = DISP_MODULE_OVL; config.bgROI.x = 0; config.bgROI.y = 0; config.bgROI.width = DISP_GetScreenWidth(); config.bgROI.height = DISP_GetScreenHeight(); config.bgColor = 0x0; // background color config.pitch = DISP_GetScreenWidth()*2; config.srcROI.x = 0;config.srcROI.y = 0; config.srcROI.height= DISP_GetScreenHeight();config.srcROI.width= DISP_GetScreenWidth(); config.ovl_config.source = OVL_LAYER_SOURCE_MEM; if(lcm_params->dsi.mode != CMD_MODE) { config.ovl_config.layer = FB_LAYER; config.ovl_config.layer_en = 0; disp_path_get_mutex(); disp_path_config_layer(&config.ovl_config); disp_path_release_mutex(); disp_path_wait_reg_update(); } // Config FB_Layer port to be physical. { M4U_PORT_STRUCT portStruct; portStruct.ePortID = M4U_PORT_OVL_CH3; //hardware port ID, defined in M4U_PORT_ID_ENUM portStruct.Virtuality = 1; portStruct.Security = 0; portStruct.domain = 3; //domain : 0 1 2 3 portStruct.Distance = 1; portStruct.Direction = 0; m4u_config_port(&portStruct); } config.ovl_config.layer = FB_LAYER; config.ovl_config.layer_en = 1; config.ovl_config.fmt = OVL_INPUT_FORMAT_RGB565; config.ovl_config.addr = fbPA; config.ovl_config.source = OVL_LAYER_SOURCE_MEM; config.ovl_config.src_x = 0; config.ovl_config.src_y = 0; config.ovl_config.dst_x = 0; // ROI config.ovl_config.dst_y = 0; config.ovl_config.dst_w = DISP_GetScreenWidth(); config.ovl_config.dst_h = DISP_GetScreenHeight(); config.ovl_config.src_pitch = ALIGN_TO(DISP_GetScreenWidth(),32)*2; //pixel number config.ovl_config.keyEn = 0; config.ovl_config.key = 0xFF; // color key config.ovl_config.aen = 0; // alpha enable config.ovl_config.alpha = 0; LCD_LayerSetAddress(FB_LAYER, fbPA); LCD_LayerSetFormat(FB_LAYER, LCD_LAYER_FORMAT_RGB565); LCD_LayerSetOffset(FB_LAYER, 0, 0); LCD_LayerSetSize(FB_LAYER,DISP_GetScreenWidth(),DISP_GetScreenHeight()); LCD_LayerSetPitch(FB_LAYER, ALIGN_TO(DISP_GetScreenWidth(),32) * 2); LCD_LayerEnable(FB_LAYER, TRUE); if(lcm_params->dsi.mode == CMD_MODE) config.dstModule = DISP_MODULE_DSI_CMD;// DISP_MODULE_WDMA1 else config.dstModule = DISP_MODULE_DSI_VDO;// DISP_MODULE_WDMA1 config.outFormat = RDMA_OUTPUT_FORMAT_ARGB; if(lcm_params->dsi.mode != CMD_MODE) disp_path_get_mutex(); disp_path_config(&config); if(lcm_params->dsi.mode != CMD_MODE) disp_path_release_mutex(); // Disable LK UI layer (Layer2) if(lcm_params->dsi.mode != CMD_MODE) { config.ovl_config.layer = FB_LAYER-1; config.ovl_config.layer_en = 0; disp_path_get_mutex(); disp_path_config_layer(&config.ovl_config); disp_path_release_mutex(); disp_path_wait_reg_update(); } // Config LK UI layer port to be physical. { M4U_PORT_STRUCT portStruct; portStruct.ePortID = M4U_PORT_OVL_CH2; //hardware port ID, defined in M4U_PORT_ID_ENUM portStruct.Virtuality = 1; portStruct.Security = 0; portStruct.domain = 3; //domain : 0 1 2 3 portStruct.Distance = 1; portStruct.Direction = 0; m4u_config_port(&portStruct); } } #endif return DISP_STATUS_OK; }
static DISP_STATUS dsi_init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited) { // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if (!disp_drv_dsi_init_context()) return DISP_STATUS_NOT_IMPLEMENTED; // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if(lcm_params->dsi.mode == CMD_MODE) { #ifndef MT65XX_NEW_DISP init_lcd(); #endif init_dsi(isLcmInited); mdelay(1); // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); #ifndef MT65XX_NEW_DISP DSI_clk_HS_mode(0); #else DSI_clk_HS_mode(1); #endif // DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "%s, line:%d\n", __func__, __LINE__); DSI_SetMode(lcm_params->dsi.mode); #ifndef MT65XX_NEW_DISP init_lcd_te_control(); #endif } else { #ifndef MT65XX_NEW_DISP init_intermediate_buffers(fbPA); init_lcd(); init_dpi(isLcmInited); #endif if (!isLcmInited) { DSI_SetMode(0); mdelay(100); DSI_Stop(); } else { is_video_mode_running = true; } init_dsi(isLcmInited); mdelay(1); if (NULL != lcm_drv->init && !isLcmInited) { lcm_drv->init(); DSI_LP_Reset(); } DSI_SetMode(lcm_params->dsi.mode); #ifndef BUILD_UBOOT if(lcm_params->dsi.lcm_ext_te_monitor) { is_video_mode_running = false; LCD_TE_SetMode(LCD_TE_MODE_VSYNC_ONLY); LCD_TE_SetEdgePolarity(LCM_POLARITY_RISING); LCD_TE_Enable(FALSE); } if(lcm_params->dsi.noncont_clock) DSI_set_noncont_clk(false, lcm_params->dsi.noncont_clock_period); if(lcm_params->dsi.lcm_int_te_monitor) DSI_set_int_TE(false, lcm_params->dsi.lcm_int_te_period); #endif } dsi_config_ddp(fbPA); printk("%s, config done\n", __func__); return DISP_STATUS_OK; }