📄 s3c6400_disp.cpp
字号:
LeaveCriticalSection(&m_csDevice);
}
void
S3C6400Disp::OverlayEnable(void)
{
DISPDRV_MSG((_T("[DISPDRV] S3C6400Disp::OverlayEnable()\n\r")));
if (m_VideoPowerState == VideoPowerOff)
{
// To Avoid System Hang in SystemIdle State
// When Application access to DDraw API in SystemIdle State
// System Hangs... (Maybe Display Driver in VideoPowerOff state)
DISPDRV_INF((_T("[DISPDRV:INF] DevOverlayEnable() : Skipped in 'VideoPowerOff State'\n\r")));
}
else
{
EnterCriticalSection(&m_csDevice);
DevOverlayEnable();
LeaveCriticalSection(&m_csDevice);
}
}
void
S3C6400Disp::OverlayDisable(void)
{
DISPDRV_MSG((_T("[DISPDRV] S3C6400Disp::OverlayDisable()\n\r")));
if (m_VideoPowerState == VideoPowerOff)
{
// To Avoid System Hang in SystemIdle State
// When Application access to DDraw API in SystemIdle State
// System Hangs... (Maybe Display Driver in VideoPowerOff state)
DISPDRV_INF((_T("[DISPDRV:INF] OverlayDisable() : Skipped in 'VideoPowerOff State'\n\r")));
}
else
{
EnterCriticalSection(&m_csDevice);
DevOverlayDisable();
LeaveCriticalSection(&m_csDevice);
}
}
void
S3C6400Disp::OverlayBlendDisable(void)
{
m_OverlayCtxt.bBlendOn = FALSE;
if (m_VideoPowerState == VideoPowerOff)
{
// To Avoid System Hang in SystemIdle State
// When Application access to DDraw API in SystemIdle State
// System Hangs... (Maybe Display Driver in VideoPowerOff state)
DISPDRV_INF((_T("[DISPDRV:INF] OverlayBlendDisable() : Skipped in 'VideoPowerOff State'\n\r")));
}
else
{
//EnterCriticalSection(&m_csDevice); // Not so Critical
DevOverlayBlendDisable();
//LeaveCriticalSection(&m_csDevice); // Not so Critical
}
}
void
S3C6400Disp::OverlaySetColorKey(BOOL bSrcCKey, EDDGPEPixelFormat Format, DWORD ColorKey)
{
m_OverlayCtxt.bBlendOn = TRUE;
m_OverlayCtxt.bColorKey = TRUE;
m_OverlayCtxt.bSrcCKey = bSrcCKey;
m_OverlayCtxt.Format = Format;
m_OverlayCtxt.ColorKey = ColorKey;
if (m_VideoPowerState == VideoPowerOff)
{
// To Avoid System Hang in SystemIdle State
// When Application access to DDraw API in SystemIdle State
// System Hangs... (Maybe Display Driver in VideoPowerOff state)
DISPDRV_INF((_T("[DISPDRV:INF] OverlaySetColorKey() : Skipped in 'VideoPowerOff State'\n\r")));
}
else
{
//EnterCriticalSection(&m_csDevice); // Not so Critical
DevOverlaySetColorKey();
//LeaveCriticalSection(&m_csDevice); // Not so Critical
}
}
void
S3C6400Disp::OverlaySetAlpha(BOOL bUsePixelBlend, DWORD Alpha)
{
m_OverlayCtxt.bBlendOn = TRUE;
m_OverlayCtxt.bColorKey = FALSE;
m_OverlayCtxt.bUsePixelBlend = bUsePixelBlend;
m_OverlayCtxt.Alpha = Alpha;
if (m_VideoPowerState == VideoPowerOff)
{
// To Avoid System Hang in SystemIdle State
// When Application access to DDraw API in SystemIdle State
// System Hangs... (Maybe Display Driver in VideoPowerOff state)
DISPDRV_INF((_T("[DISPDRV:INF] OverlaySetAlpha() : Skipped in 'VideoPowerOff State'\n\r")));
}
else
{
//EnterCriticalSection(&m_csDevice); // Not so Critical
DevOverlaySetAlpha();
//LeaveCriticalSection(&m_csDevice); // Not so Critical
}
}
BOOL
S3C6400Disp::DevInitialize(void)
{
DISPDRV_MSG((_T("[DISPDRV] ++S3C6400Disp::DevInitialize()\n\r")));
EnterCriticalSection(&m_csDevice);
// Enable Block Power
DevHWPowerGating(HWPWR_DISPLAY_ON);
DevHWPowerGating(HWPWR_POST_ON); // Post Processor keeps Always On while Display is On, But Clock is Controlled
// Enable Clock Source
DevHWClockGating(HWCLK_DISPLAY_ON);
DevHWClockGating(HWCLK_MSMIF_ON);
// Initialize SFR Address of Sub Module
LDI_initialize_register_address((void *)m_pSPIReg, (void *)m_pDispConReg, (void *)m_pGPIOReg);
Disp_initialize_register_address((void *)m_pDispConReg, (void *)m_pMSMIFReg, (void *)m_pGPIOReg);
Post_initialize_register_address((void *)m_pPostReg);
TVSC_initialize_register_address((void *)m_pTVSCReg);
TVEnc_initialize_register_address((void *)m_pTVEncReg, (void *)m_pGPIOReg);
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480) // LTE480 need RGB I/F Signal during LCD Pannel Initialization
//------------------------
// Display Controller Initialize
//------------------------
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
Disp_initialize_output_interface(DISP_VIDOUT_RGBIF);
switch(m_pModeEx->ePixelFormat)
{
case ddgpePixelFormat_565:
Disp_set_dithering_mode(DISP_DITHER_565);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_16BPP_565, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
case ddgpePixelFormat_8888:
Disp_set_dithering_mode(DISP_DITHER_OFF);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_24BPP_888, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
default:
DISPDRV_ERR((_T("[DISPDRV:ERR] InitializeDevice() : Unknown PixelFormat %d \n\r"), m_pModeEx->ePixelFormat));
break;
}
Disp_set_framebuffer(DISP_WIN2, m_VideoMemoryPhysicalBase);
Disp_window_onfoff(DISP_WIN2, DISP_WINDOW_ON);
Disp_set_frame_interrupt(DISP_FRMINT_FRONTPORCH);
// Disable Interrupt
Disp_disable_frame_interrupt();
// Display Output Enable
Disp_envid_onoff(DISP_ENVID_ON);
//-------------------
// LCD Module Initialize
//-------------------
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
LDI_initialize_LCD_module();
#else // (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480)
//-------------------
// LCD Module Initialize
//-------------------
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTS222)
// MSM I/F Bypass Mode Disable
m_pMSMIFReg->MIFPCON &= ~(0x1<<3); // SEL_BYPASS -> Normal Mode
LDI_set_LCD_module_type(LDI_LTS222QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTV350)
LDI_set_LCD_module_type(LDI_LTV350QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTP700)
LDI_set_LCD_module_type(LDI_LTP700WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULQV)
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULPQV)
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
#endif
LDI_initialize_LCD_module();
//------------------------
// Display Controller Initialize
//------------------------
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTS222)
Disp_set_output_device_information(DISP_DEV_LTS222QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTV350)
Disp_set_output_device_information(DISP_DEV_LTV350QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTP700)
Disp_set_output_device_information(DISP_DEV_LTP700WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULQV)
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULPQV)
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
#endif
#if 1
Disp_initialize_output_interface(DISP_VIDOUT_RGBIF);
#else // for Test
#if 0
Disp_initialize_output_interface(DISP_VIDOUT_RGBIF_TVENCODER);
TVSC_initialize(TVSC_FREE_RUN_MODE, TVSC_INTERLACE, TVSC_SRC_FIFO, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, TVSC_DST_FIFO_YUV444, 720*2, 480);
TVSC_disable_interrupt();
TVEnc_initialize(TVENC_COMPOSITE, TVENC_NTSC_M, TVENC_MACROVISION_OFF, 720, 480);
TVEnc_disable_interrupt();
TVEnc_output_onoff(TVENC_ENCODER_ON);
TVSC_processing_start();
#elif 0
Disp_initialize_output_interface(DISP_VIDOUT_TVENCODER);
// TODO:
TVSC_initialize(TVSC_FREE_RUN_MODE, TVSC_INTERLACE, TVSC_SRC_FIFO, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, TVSC_DST_FIFO_YUV444, 640*2, 448);
TVSC_disable_interrupt();
TVEnc_initialize(TVENC_COMPOSITE, TVENC_NTSC_M, TVENC_MACROVISION_OFF, 640, 448);
TVEnc_disable_interrupt();
TVEnc_output_onoff(TVENC_ENCODER_ON);
TVSC_processing_start();
#endif
#endif
switch(m_pModeEx->ePixelFormat)
{
case ddgpePixelFormat_565:
Disp_set_dithering_mode(DISP_DITHER_565);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_16BPP_565, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
case ddgpePixelFormat_8888:
Disp_set_dithering_mode(DISP_DITHER_OFF);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_24BPP_888, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
default:
DISPDRV_ERR((_T("[DISPDRV:ERR] InitializeDevice() : Unknown PixelFormat %d \n\r"), m_pModeEx->ePixelFormat));
break;
}
Disp_set_framebuffer(DISP_WIN2, m_VideoMemoryPhysicalBase);
Disp_window_onfoff(DISP_WIN2, DISP_WINDOW_ON);
Disp_set_frame_interrupt(DISP_FRMINT_FRONTPORCH);
// Disable Interrupt
Disp_disable_frame_interrupt();
// Display Output Enable
Disp_envid_onoff(DISP_ENVID_ON);
#endif // (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480)
// Disable Clock Source
DevHWClockGating(HWCLK_MSMIF_OFF);
LeaveCriticalSection(&m_csDevice);
// Backlight On
// TODO: To be Replaced with Backlight Driver
m_pGPIOReg->GPFDAT |= (1<<15); // set GPF[15] to High
m_pGPIOReg->GPFCON = (m_pGPIOReg->GPFCON & ~(3<<30)) | (1<<30); // set GPF[15] as Output
DISPDRV_MSG((_T("[DISPDRV] --S3C6400Disp::DevInitialize()\n\r")));
return TRUE;
}
BOOL
S3C6400Disp::DevPowerOn(void)
{
DISPDRV_INF((_T("[DISPDRV] ++S3C6400Disp::DevPowerOn()\n\r")));
EnterCriticalSection(&m_csDevice);
// Enable Block Power
DevHWPowerGating(HWPWR_DISPLAY_ON);
DevHWPowerGating(HWPWR_POST_ON); // Post Processor keeps Always On while Display is On, But Clock is Controlled
#if G2D_ACCELERATE
DevHWPowerGating(HWPWR_2D_ON);
#endif
// Enable Clock Source
DevHWClockGating(HWCLK_DISPLAY_ON);
DevHWClockGating(HWCLK_MSMIF_ON);
#if G2D_ACCELERATE
DevHWClockGating(HWCLK_2D_ON);
#endif
// Don't Use Color Map with Local Path
Disp_set_window_color_map(DISP_WIN2, FALSE, 0x0);
Disp_set_window_color_map(DISP_WIN0, FALSE, 0x0);
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480) // LTE480 need RGB I/F Signal during LCD Pannel Initialization
//------------------------
// Display Controller Initialize
//------------------------
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
Disp_initialize_output_interface(DISP_VIDOUT_RGBIF);
switch(m_pModeEx->ePixelFormat)
{
case ddgpePixelFormat_565:
Disp_set_dithering_mode(DISP_DITHER_565);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_16BPP_565, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
case ddgpePixelFormat_8888:
Disp_set_dithering_mode(DISP_DITHER_OFF);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_24BPP_888, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
default:
DISPDRV_ERR((_T("[DISPDRV:ERR] DevPowerOn() : Unknown PixelFormat %d \n\r"), m_pModeEx->ePixelFormat));
break;
}
Disp_set_framebuffer(DISP_WIN2, m_VideoMemoryPhysicalBase);
Disp_window_onfoff(DISP_WIN2, DISP_WINDOW_ON);
Disp_set_frame_interrupt(DISP_FRMINT_FRONTPORCH);
// Disable Interrupt
Disp_disable_frame_interrupt();
// Display Output Enable
Disp_envid_onoff(DISP_ENVID_ON);
//-------------------
// LCD Module Initialize
//-------------------
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
LDI_initialize_LCD_module();
#else // (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480)
//-------------------
// LCD Module Initialize
//-------------------
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTS222)
// MSM I/F Bypass Mode Disable
m_pMSMIFReg->MIFPCON &= ~(0x1<<3); // SEL_BYPASS -> Normal Mode
LDI_set_LCD_module_type(LDI_LTS222QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTV350)
LDI_set_LCD_module_type(LDI_LTV350QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTP700)
LDI_set_LCD_module_type(LDI_LTP700WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULQV)
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULPQV)
LDI_set_LCD_module_type(LDI_LTE480WV_RGB);
#endif
LDI_initialize_LCD_module();
//------------------------
// Display Controller Initialize
//------------------------
#if (SMDK6400_LCD_MODULE == LCD_MODULE_LTS222)
Disp_set_output_device_information(DISP_DEV_LTS222QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTV350)
Disp_set_output_device_information(DISP_DEV_LTV350QV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_LTP700)
Disp_set_output_device_information(DISP_DEV_LTP700WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULQV)
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
#elif (SMDK6400_LCD_MODULE == LCD_MODULE_EMULPQV)
Disp_set_output_device_information(DISP_DEV_LTE480WV_RGB);
#endif
Disp_initialize_output_interface(DISP_VIDOUT_RGBIF);
switch(m_pModeEx->ePixelFormat)
{
case ddgpePixelFormat_565:
Disp_set_dithering_mode(DISP_DITHER_565);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_16BPP_565, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
case ddgpePixelFormat_8888:
Disp_set_dithering_mode(DISP_DITHER_OFF);
Disp_set_window_mode(DISP_WIN2_DMA, DISP_24BPP_888, m_dwDeviceScreenWidth, m_dwDeviceScreenHeight, 0, 0);
break;
default:
DISPDRV_ERR((_T("[DISPDRV:ERR] DevPowerOn() : Unknown PixelFormat %d \n\r"), m_pModeEx->ePixelFormat));
break;
}
Disp_set_framebuffer(DISP_WIN2, m_VideoMemoryPhysicalBase);
Disp_window_onfoff(DISP_WIN2, DISP_WINDOW_ON);
Disp_set_frame_interrupt(DISP_FRMINT_FRONTPORCH);
// Disable Interrupt
Disp_disable_frame_interrupt();
// Display Output Enable
Disp_envid_onoff(DISP_ENVID_ON);
#endif // (SMDK6400_LCD_MODULE == LCD_MODULE_LTE480)
// Disable Clock Source
DevHWClockGating(HWCLK_MSMIF_OFF);
// Overlay On
if(m_fpCurrentOverlay)
{
DevRecoverOverlay();
}
// Backlight On
// TODO: To be Replaced with Backlight Driver
m_pGPIOReg->GPFDAT |= (1<<15); // set GPF[15] to High
m_pGPIOReg->GPFCON = (m_pGPIOReg->GPFCON & ~(3<<30)) | (1<<30); // set GPF[15] as Output
LeaveCriticalSection(&m_csDevice);
DISPDRV_INF((_T("[DISPDRV] --S3C6400Disp::DevPowerOn()\n\r")));
return TRUE;
}
BOOL
S3C6400Disp::DevPowerOff(void)
{
DISPDRV_INF((_T("[DISPDRV] ++S3C6400Disp::DevPowerOff()\n\r")));
// Backlight Off
// TODO: To be Replaced with Backlight Driver
m_pGPIOReg->GPFDAT &= ~(1<<15); // set GPF[15] to Low
m_pGPIOReg->GPFCON = (m_pGPIOReg->GPFCON & ~(3<<30)) | (1<<30); // set GPF[15] as Output
EnterCriticalSection(&m_csDevice);
// Overlay Off
if(m_fpCurrentOverlay)
{
DevOverlayDisable();
}
// TODO: LCD Module Power Off code shoud be implemented
// Don't Use Color Map with Local Path
// Set window image output to specific color (Black)
Disp_set_window_color_map(DISP_WIN2, TRUE, 0x0);
Disp_set_wind
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -