static void init_lcd(void) { UINT32 i; LCD_CHECK_RET(LCD_LayerEnable(LCD_LAYER_ALL, FALSE)); LCD_CHECK_RET(LCD_LayerSetTriggerMode(LCD_LAYER_ALL, LCD_SW_TRIGGER)); LCD_CHECK_RET(LCD_EnableHwTrigger(FALSE)); LCD_CHECK_RET(LCD_SetBackgroundColor(0)); LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, DISP_GetScreenWidth(), DISP_GetScreenHeight())); LCD_CHECK_RET(LCD_FBSetFormat(lcdTmpBufFormat)); LCD_CHECK_RET(LCD_FBSetPitch(s_tmpBuffers[0].pitchInBytes)); LCD_CHECK_RET(LCD_FBSetStartCoord(0, 0)); for (i = 0; i < lcm_params->dpi.intermediat_buffer_num; ++ i) { LCD_CHECK_RET(LCD_FBSetAddress(LCD_FB_0 + i, s_tmpBuffers[i].pa)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_0 + i, TRUE)); } LCD_CHECK_RET(LCD_SetOutputMode(LCD_OUTPUT_TO_MEM)); /** "LCD Delay Enable" function should be used when there is only single buffer between LCD and DPI. Double buffer even triple buffer need not enable it. */ LCD_CHECK_RET(LCD_WaitDPIIndication(TRUE)); }
static void init_lcd(void) { UINT32 i; // Config LCD Controller LCD_CHECK_RET(LCD_LayerEnable(LCD_LAYER_ALL, FALSE)); LCD_CHECK_RET(LCD_LayerSetTriggerMode(LCD_LAYER_ALL, LCD_SW_TRIGGER)); LCD_CHECK_RET(LCD_EnableHwTrigger(FALSE)); LCD_CHECK_RET(LCD_SetBackgroundColor(0)); if(lcm_params->dsi.mode == CMD_MODE) LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, lcm_params->width, lcm_params->height)); else LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, DISP_GetScreenWidth(), DISP_GetScreenHeight())); if(lcm_params->dsi.mode == CMD_MODE) { LCD_CHECK_RET(LCD_ConfigDSIIfFormat(lcm_params->dsi.data_format.color_order, lcm_params->dsi.data_format.trans_seq, lcm_params->dsi.data_format.padding, lcm_params->dsi.data_format.format, lcm_params->dsi.packet_size, TRUE)); LCD_CHECK_RET(LCD_SetOutputMode(LCD_OUTPUT_TO_LCM)); LCD_CHECK_RET(LCD_WaitDPIIndication(FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_0, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_1, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_2, FALSE)); } else { LCD_CHECK_RET(LCD_FBSetFormat(get_lcd_tmp_buffer_format())); LCD_CHECK_RET(LCD_FBSetPitch(s_tmpBuffers[0].pitchInBytes)); LCD_CHECK_RET(LCD_FBSetStartCoord(0, 0)); for (i = 0; i < lcm_params->dsi.intermediat_buffer_num; ++ i) { LCD_CHECK_RET(LCD_FBSetAddress(LCD_FB_0 + i, s_tmpBuffers[i].pa)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_0 + i, TRUE)); } LCD_CHECK_RET(LCD_SetOutputMode(LCD_OUTPUT_TO_MEM)); LCD_CHECK_RET(LCD_WaitDPIIndication(TRUE)); } }
static void init_lcd(void) { /* Config LCD Controller */ LCD_CHECK_RET(LCD_LayerEnable(LCD_LAYER_ALL, FALSE)); LCD_CHECK_RET(LCD_LayerSetTriggerMode(LCD_LAYER_ALL, LCD_SW_TRIGGER)); LCD_CHECK_RET(LCD_EnableHwTrigger(FALSE)); LCD_CHECK_RET(LCD_SetBackgroundColor(0)); LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, lcm_params->width, lcm_params->height)); LCD_CHECK_RET(LCD_SetOutputMode(LCD_OUTPUT_TO_LCM)); LCD_CHECK_RET(LCD_WaitDPIIndication(FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_0, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_1, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_2, FALSE)); }
static void init_lcd(BOOL isLcdPoweredOn) { // Config LCD Controller LCD_CHECK_RET(LCD_Init(isLcdPoweredOn)); LCD_CHECK_RET(LCD_LayerEnable(LCD_LAYER_ALL, FALSE)); LCD_CHECK_RET(LCD_LayerSetTriggerMode(LCD_LAYER_ALL, LCD_SW_TRIGGER)); LCD_CHECK_RET(LCD_EnableHwTrigger(FALSE)); LCD_CHECK_RET(LCD_SetBackgroundColor(0)); LCD_CHECK_RET(LCD_SetRoiWindow(0, 0, DISP_GetScreenWidth(), DISP_GetScreenHeight())); LCD_CHECK_RET(LCD_SetOutputMode(LCD_OUTPUT_TO_LCM)); LCD_CHECK_RET(LCD_WaitDPIIndication(FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_0, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_1, FALSE)); LCD_CHECK_RET(LCD_FBEnable(LCD_FB_2, FALSE)); }
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++)