DISP_STATUS DISP_UpdateScreen(UINT32 x, UINT32 y, UINT32 width, UINT32 height) { LCD_CHECK_RET(LCD_WaitForNotBusy()); if ((lcm_drv->update) && ((lcm_params->type==LCM_TYPE_DBI) || ((lcm_params->type==LCM_TYPE_DSI) && (lcm_params->dsi.mode==CMD_MODE)))) { lcm_drv->update(x, y, width, height); } LCD_CHECK_RET(LCD_SetRoiWindow(x, y, width, height)); LCD_CHECK_RET(LCD_FBSetStartCoord(x, y)); LCD_CHECK_RET(LCD_StartTransfer(FALSE)); if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode==CMD_MODE) { DSI_clk_HS_mode(1); DSI_CHECK_RET(DSI_EnableClk()); } else if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode!=CMD_MODE) { DSI_clk_HS_mode(1); DPI_CHECK_RET(DPI_EnableClk()); DSI_CHECK_RET(DSI_EnableClk()); } return DISP_STATUS_OK; }
UINT32 mt65xx_disp_get_lcd_time(void) { #if 0 UINT32 time0, time1, lcd_time; mt65xx_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); LCD_CHECK_RET(LCD_WaitForNotBusy()); time0 = gpt4_tick2time_us(gpt4_get_current_tick()); LCD_CHECK_RET(LCD_StartTransfer(FALSE)); if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode==CMD_MODE) { DSI_clk_HS_mode(1); DSI_CHECK_RET(DSI_EnableClk()); } else if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode!=CMD_MODE) { DSI_clk_HS_mode(1); DPI_CHECK_RET(DPI_EnableClk()); DSI_CHECK_RET(DSI_EnableClk()); } LCD_CHECK_RET(LCD_WaitForNotBusy()); time1 = gpt4_tick2time_us(gpt4_get_current_tick()); lcd_time = time1 - time0; printf("lcd one %d \n", lcd_time); if(0 != lcd_time) return (100000000/lcd_time); else #endif return (6000); }
static DISP_STATUS dbi_update_screen(void) { LCD_CHECK_RET(LCD_StartTransfer(FALSE)); return DISP_STATUS_OK; }
static DISP_STATUS dbi_update_screen(BOOL isMuextLocked) { LCD_CHECK_RET(LCD_StartTransfer(FALSE, isMuextLocked)); return DISP_STATUS_OK; }
static DISP_STATUS dpi_update_screen(void) { #ifndef MT65XX_NEW_DISP LCD_CHECK_RET(LCD_StartTransfer(FALSE)); #else disp_path_get_mutex(); LCD_CHECK_RET(LCD_ConfigOVL()); disp_path_release_mutex(); #endif return DISP_STATUS_OK; }
DISP_STATUS DISP_EnableDirectLinkMode(UINT32 layer) { if (layer != direct_link_layer) { LCD_CHECK_RET(LCD_LayerSetTriggerMode(layer, LCD_HW_TRIGGER_DIRECT_COUPLE)); LCD_CHECK_RET(LCD_LayerSetHwTriggerSrc(layer, LCD_HW_TRIGGER_SRC_IBW2)); LCD_CHECK_RET(LCD_EnableHwTrigger(TRUE)); LCD_CHECK_RET(LCD_StartTransfer(FALSE)); direct_link_layer = layer; } return DISP_STATUS_OK; }
// 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 DISP_STATUS dpi_update_screen(BOOL isMuextLocked) { #ifndef MT65XX_NEW_DISP LCD_CHECK_RET(LCD_StartTransfer(FALSE, isMuextLocked)); #else if (!isMuextLocked) disp_path_get_mutex(); LCD_CHECK_RET(LCD_ConfigOVL()); if (!isMuextLocked) disp_path_release_mutex(); #endif return DISP_STATUS_OK; }
// protected by sem_flipping, sem_early_suspend, sem_overlay_buffer, sem_update_screen static DISP_STATUS dsi_update_screen(void) { 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); LCD_CHECK_RET(LCD_StartTransfer(FALSE)); if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE && !DDMS_capturing) { DSI_clk_HS_mode(1); DSI_CHECK_RET(DSI_EnableClk()); } else if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE && !DDMS_capturing) { #ifndef BUILD_UBOOT spin_lock(&g_handle_esd_lock); #endif DSI_clk_HS_mode(1); DPI_CHECK_RET(DPI_EnableClk()); DSI_CHECK_RET(DSI_EnableClk()); #ifndef BUILD_UBOOT dsi_vdo_streaming = 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); spin_unlock(&g_handle_esd_lock); #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; }
DISP_STATUS DISP_PowerEnable(BOOL enable) { DISP_STATUS ret = DISP_STATUS_OK; static BOOL s_enabled = TRUE; if (enable != s_enabled) s_enabled = enable; else return ret; if (down_interruptible(&sem_update_screen)) { DISP_LOG("ERROR: Can't get sem_update_screen in DISP_PowerEnable()\n"); return DISP_STATUS_ERROR; } disp_drv_init_context(); is_engine_in_suspend_mode = enable ? FALSE : TRUE; ret = (disp_drv->enable_power) ? (disp_drv->enable_power(enable)) : DISP_STATUS_NOT_IMPLEMENTED; if (enable) { DAL_OnDispPowerOn(); } // If in direct link mode, re-start LCD after system resume // if (enable && -1 != direct_link_layer) { LCD_CHECK_RET(LCD_StartTransfer(FALSE)); } up(&sem_update_screen); return ret; }
void DSI_set_cmdq_V2(unsigned cmd, unsigned char count, unsigned char *para_list, unsigned char force_update) { UINT32 i, layer, layer_state, lane_num; UINT32 goto_addr, mask_para, set_para; UINT32 fbPhysAddr, fbVirAddr; DSI_T0_INS t0; DSI_T1_INS t1; DSI_T2_INS t2; _WaitForEngineNotBusy(); if (count > 59) { UINT32 pixel = count/3 + ((count%3) ? 1 : 0); LCD_REG_LAYER fb_layer_info; LCD_REG_DSI_DC dsi_info; // backup layer state. layer_state = AS_UINT32(&LCD_REG->WROI_CONTROL) & 0xFC000000; // backup FB layer info. memcpy((void *)&fb_layer_info, (void *)&LCD_REG->LAYER[FB_LAYER], sizeof(LCD_REG_LAYER)); // backup LCD-DSI I/F configuration. dsi_info = LCD_REG->DS_DSI_CON; // backup lane number. lane_num = DSI_REG->DSI_TXRX_CTRL.LANE_NUM; // HW limitation. // LP type-1 command can't go with 2 lanes. So we must switch to lane mode. DSI_REG->DSI_TXRX_CTRL.LANE_NUM = 1; DSI_PHY_REG->MIPITX_CON1.RG_DSI_CK_SEL = 0; // Modify LCD-DSI configuration LCD_REG->DS_DSI_CON.DC_DSI = TRUE; // Let LSB of RGB(BGR in buffer) first. LCD_REG->DS_DSI_CON.RGB_SWAP = LCD_DSI_IF_FMT_COLOR_ORDER_BGR; // Let parameters be in unit of byte. LCD_REG->DS_DSI_CON.CLR_FMT = LCD_DSI_IF_FORMAT_RGB888; // HW limitation // It makes package numbers > 1. LCD_REG->DS_DSI_CON.PACKET_SIZE = 30; // Start of Enable only one layer (FB layer) to push data to DSI LCD_CHECK_RET(LCD_LayerEnable(LCD_LAYER_ALL, FALSE)); LCD_CHECK_RET(LCD_LayerEnable(FB_LAYER, TRUE)); LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, pixel, 1)); LCD_CHECK_RET(LCD_SetBackgroundColor(0)); // operates on FB layer { extern void disp_get_fb_address(UINT32 *fbVirAddr, UINT32 *fbPhysAddr); disp_get_fb_address(&fbVirAddr ,&fbPhysAddr); // copy parameters to FB layer buffer. memcpy((void *)fbVirAddr, (void *)para_list, count); LCD_REG->LAYER[FB_LAYER].ADDRESS = fbPhysAddr; } LCD_CHECK_RET(LCD_LayerSetFormat(FB_LAYER, LCD_LAYER_FORMAT_RGB888)); LCD_CHECK_RET(LCD_LayerSetPitch(FB_LAYER, pixel*3)); LCD_CHECK_RET(LCD_LayerSetOffset(FB_LAYER, 0, 0)); LCD_CHECK_RET(LCD_LayerSetSize(FB_LAYER, pixel, 1)); // End of Enable only one layer (FB layer) to push data to DSI t1.CONFG = 1; t1.Data_ID = DSI_DCS_LONG_PACKET_ID; t1.mem_start0 = (cmd&0xFF); t1.mem_start1 = (cmd>>8); OUTREG32(&DSI_CMDQ_REG->data0[0], AS_UINT32(&t1)); OUTREG32(&DSI_REG->DSI_CMDQ_SIZE, 1); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "[DISP] - kernel - DSI_set_cmdq_V2. command(0x%x) parameter count = %d > 59, pixel = %d \n", cmd, count, pixel); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "[DISP] - kernel - command queue only support 16 x 4 bytes. Header used 4 byte. DCS used 1 byte. If parameter > 59 byte, work around by Type-1 command. \n"); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "para_list[%d] = {", count); for (i = 0; i < count; i++) DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "0x%02x, ", para_list[i]); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DSI", "} \n"); LCD_M4U_On(0); if(force_update) { LCD_CHECK_RET(LCD_StartTransfer(FALSE)); DSI_EnableClk(); } _WaitForEngineNotBusy(); LCD_M4U_On(1); // restore FB layer info. memcpy((void *)&LCD_REG->LAYER[FB_LAYER], (void *)&fb_layer_info, sizeof(LCD_REG_LAYER)); // restore LCD-DSI I/F configuration. LCD_REG->DS_DSI_CON = dsi_info; // restore lane number. DSI_REG->DSI_TXRX_CTRL.LANE_NUM = lane_num; DSI_PHY_REG->MIPITX_CON1.RG_DSI_CK_SEL = (lane_num - 1); // restore layer state. for(layer=LCD_LAYER_0; layer<LCD_LAYER_NUM; layer++) { if(layer_state&(0x80000000>>layer)) LCD_CHECK_RET(LCD_LayerEnable(layer, TRUE)); else LCD_CHECK_RET(LCD_LayerEnable(layer, FALSE)); }
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); }
DPI_STATUS DPI_Capture_Framebuffer(unsigned int pvbuf, unsigned int bpp) { #if 0 unsigned int i = 0; unsigned char *fbv; unsigned int fbsize = 0; unsigned int dpi_fb_bpp = 0; unsigned int w,h; BOOL dpi_needPowerOff = FALSE; if(!s_isDpiPowerOn){ DPI_PowerOn(); dpi_needPowerOff = TRUE; LCD_WaitForNotBusy(); LCD_WaitDPIIndication(FALSE); LCD_FBReset(); LCD_StartTransfer(TRUE); LCD_WaitDPIIndication(TRUE); } if(pvbuf == 0 || bpp == 0) { DISP_LOG_PRINT(ANDROID_LOG_ERROR, "DPI", "DPI_Capture_Framebuffer, ERROR, parameters wrong: pvbuf=0x%08x, bpp=%d\n", pvbuf, bpp); return DPI_STATUS_OK; } if(DPI_FBGetFormat() == DPI_FB_FORMAT_RGB565) { dpi_fb_bpp = 16; } else if(DPI_FBGetFormat() == DPI_FB_FORMAT_RGB888) { dpi_fb_bpp = 24; } else { DISP_LOG_PRINT(ANDROID_LOG_ERROR, "DPI", "DPI_Capture_Framebuffer, ERROR, dpi_fb_bpp is wrong: %d\n", dpi_fb_bpp); return DPI_STATUS_OK; } w = DISP_GetScreenWidth(); h = DISP_GetScreenHeight(); fbsize = w*h*dpi_fb_bpp/8; if(dpi_needPowerOff) fbv = (unsigned char*)ioremap_cached((unsigned int)DPI_REG->FB[0].ADDR, fbsize); else fbv = (unsigned char*)ioremap_cached((unsigned int)DPI_REG->FB[DPI_GetCurrentFB()].ADDR, fbsize); DISP_LOG_PRINT(ANDROID_LOG_INFO, "DPI", "current fb count is %d\n", DPI_GetCurrentFB()); if(bpp == 32 && dpi_fb_bpp == 24) { if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)){ unsigned int pix_count = w * h - 1; for(i = 0;i < w*h; i++) { *(unsigned int*)(pvbuf+ (pix_count - i) * 4) = 0xff000000|fbv[i*3]|(fbv[i*3+1]<<8)|(fbv[i*3+2]<<16); } } else{ for(i = 0;i < w*h; i++) { *(unsigned int*)(pvbuf+i*4) = 0xff000000|fbv[i*3]|(fbv[i*3+1]<<8)|(fbv[i*3+2]<<16); } } } else if(bpp == 32 && dpi_fb_bpp == 16) { unsigned int t; unsigned short* fbvt = (unsigned short*)fbv; if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)){ unsigned int pix_count = w * h - 1; for(i = 0;i < w*h; i++) { t = fbvt[i]; *(unsigned int*)(pvbuf+ (pix_count - i) * 4) = 0xff000000|((t&0x001F)<<3)|((t&0x07E0)<<5)|((t&0xF800)<<8); } } else{ for(i = 0;i < w*h; i++) { t = fbvt[i]; *(unsigned int*)(pvbuf+i*4) = 0xff000000|((t&0x001F)<<3)|((t&0x07E0)<<5)|((t&0xF800)<<8); } } } else if(bpp == 16 && dpi_fb_bpp == 16) { if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)){ unsigned int pix_count = w * h - 1; unsigned short* fbvt = (unsigned short*)fbv; for(i = 0;i < w*h; i++) { *(unsigned short*)(pvbuf+ (pix_count - i) * 2) = fbvt[i]; } } else memcpy((void*)pvbuf, (void*)fbv, fbsize); } else if(bpp == 16 && dpi_fb_bpp == 24) { if(0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)){ unsigned int pix_count = w * h - 1; for(i = 0;i < w*h; i++) { *(unsigned short*)(pvbuf+ (pix_count - i) * 2) = ((fbv[i*3+0]&0xF8)>>3)| ((fbv[i*3+1]&0xFC)<<3)| ((fbv[i*3+2]&0xF8)<<8); } } else{ for(i = 0;i < w*h; i++)
void TVDVT_update_screen(void) { LCD_CHECK_RET(LCD_StartTransfer(FALSE)); }