📄 power.c
字号:
// Disable TV Scaler Operation
TVSC_processing_stop();
// Disable TV Encoder Operation
TVEnc_output_onoff(TVENC_ENCODER_OFF);
// Disable Post Processor Operation
Post_processing_stop();
// Disable Rotator Operation
Rotator_stop();
pCtxt->bRotatorBusy = FALSE;
//----------------------
// Clear Command Context
//----------------------
pCtxt->DispCmdCtxt[DISP_WIN0].bCmdSetBuffer = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN0].bCmdSetPosition = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN1].bCmdSetBuffer = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN1].bCmdSetPosition = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN2].bCmdSetBuffer = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN2].bCmdSetPosition = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN3].bCmdSetBuffer = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN3].bCmdSetPosition = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN4].bCmdSetBuffer = FALSE;
pCtxt->DispCmdCtxt[DISP_WIN4].bCmdSetPosition = FALSE;
pCtxt->PostCmdCtxt.bCmdSetSrcBuffer = FALSE;
pCtxt->PostCmdCtxt.bCmdSetDstBuffer = FALSE;
pCtxt->LocalPathCmdCtxt.bCmdSetWin0Disable = FALSE;
pCtxt->LocalPathCmdCtxt.bCmdSetWin1Disable = FALSE;
pCtxt->LocalPathCmdCtxt.bCmdSetWin2Disable = FALSE;
pCtxt->TVSCCmdCtxt.bCmdSetSrcBuffer = FALSE;
pCtxt->TVSCCmdCtxt.bCmdSetDstBuffer = FALSE;
//-------------------------------
// HW Clock Off and Block Power Off
//-------------------------------
SVE_hw_clock_control(HWCLK_ALL_OFF);
SVE_hw_power_control(HWPWR_ALL_OFF);
//-------------------
// Update Power State
//-------------------
pPMCtxt->bPowerOn = FALSE;
CleanUp:
VDE_MSG((_T("[VDE] --SVE_video_engine_power_off()\r\n")));
return bRet;
}
BOOL SVE_initialize_power_control(void)
{
SVEngineContext *pCtxt;
VDE_MSG((_T("[VDE] ++SVE_initialize_power_control()\r\n")));
pCtxt = SVE_get_context();
// Open Device Power Control Driver
pCtxt->hPowerControl = CreateFile( L"PWC0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
if (pCtxt->hPowerControl == INVALID_HANDLE_VALUE)
{
VDE_ERR((_T("[VDE:ERR] SVE_initialize_video_engine() : PWC0 Open Device Failed\r\n")));
goto CleanUp;
}
VDE_MSG((_T("[VDE] ++SVE_initialize_power_control()\r\n")));
return TRUE;
CleanUp:
VDE_ERR((_T("[VDE:ERR] --SVE_initialize_power_control() : Failed\r\n")));
return FALSE;
}
void SVE_deinitialize_power_control(void)
{
SVEngineContext *pCtxt;
VDE_MSG((_T("[VDE] ++SVE_deinitialize_power_control()\r\n")));
pCtxt = SVE_get_context();
if (pCtxt->hPowerControl !=INVALID_HANDLE_VALUE)
{
CloseHandle(pCtxt->hPowerControl);
}
VDE_MSG((_T("[VDE] ++SVE_deinitialize_power_control()\r\n")));
}
BOOL SVE_hw_clock_control(HWCLK_GATING eParams)
{
SVEngineContext *pCtxt;
BOOL bRet = TRUE;
VDE_MSG((_T("[VDE] ++SVE_hw_clock_control(%d)\r\n"), eParams));
pCtxt = SVE_get_context();
switch(eParams)
{
case HWCLK_ALL_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<15) // MSM I/F
|(1<<9) // TV Scaler
|(1<<8) // 2D
|(1<<7) // TV Encoder
|(1<<5) // Post Processor
|(1<<4) // Image Rotator
|(1<<3); // Display Controller
pCtxt->pSysConReg->SCLK_GATE |= (1<<19) // DAC 27MHz
|(1<<18) // TV Encoder 27MHz
//|(1<<17) // TV Scaler 27MHz
|(1<<16) // TV Scaler
|(1<<15) // Display Controller 27MHz
|(1<<14) // Display Controller
//|(1<<13) // Post Processor 1 27MHz
//|(1<<12) // Post Processor 0 27MHz
//|(1<<11) // Post Processor 1
|(1<<10); // Post Processor 0
break;
case HWCLK_ALL_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~((1<<15)|/*(1<<9)| */(1<<8)|(1<<7)|(1<<5)|(1<<4)|(1<<3));
pCtxt->pSysConReg->SCLK_GATE &= ~((1<<19)|(1<<18)|(1<<16)|(1<<15)|(1<<14)|(1<<10));
break;
case HWCLK_DISPLAY_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<15) // MSM I/F
|(1<<3); // Display Controller
pCtxt->pSysConReg->SCLK_GATE |= (1<<14); // Display Controller
break;
case HWCLK_DISPLAY_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~((1<<15)|(1<<3));
pCtxt->pSysConReg->SCLK_GATE &= ~(1<<14);
break;
case HWCLK_MSMIF_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<15); // MSM I/F
break;
case HWCLK_MSMIF_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~(1<<15); // MSM I/F
break;
case HWCLK_POST_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<5); // Post Processor
pCtxt->pSysConReg->SCLK_GATE |= (1<<10); // Post Processor 0
break;
case HWCLK_POST_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~(1<<5); // Post Processor
pCtxt->pSysConReg->SCLK_GATE &= ~(1<<10); // Post Processor 0
break;
case HWCLK_ROTATOR_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<4); // Image Rotator
break;
case HWCLK_ROTATOR_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~(1<<4); // Image Rotator
break;
case HWCLK_TV_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<9) // TV Scaler
|(1<<7); // TV Encoder
pCtxt->pSysConReg->SCLK_GATE |= (1<<19) // DAC 27MHz
|(1<<18) // TV Encoder 27MHz
|(1<<16) // TV Scaler
|(1<<15); // Display Controller 27MHz
break;
case HWCLK_TV_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~((1<<9)|(1<<7));
pCtxt->pSysConReg->SCLK_GATE &= ~((1<<19)|(1<<18)|(1<<16)|(1<<15));
break;
case HWCLK_2D_ON:
pCtxt->pSysConReg->HCLK_GATE |= (1<<8); // FIMG 2D
break;
case HWCLK_2D_OFF:
pCtxt->pSysConReg->HCLK_GATE &= ~(1<<8); // FIMG 2D
break;
default:
VDE_ERR((_T("[VDE:ERR] SVE_hw_clock_control() : Unknown Parameter = %d\n\r"), eParams));
bRet = FALSE;
break;
}
VDE_MSG((_T("[VDE] --SVE_hw_clock_control()\n\r")));
return bRet;
}
BOOL SVE_hw_power_control(HWPWR_GATING eParams)
{
SVEngineContext *pCtxt;
DWORD dwIPIndex, dwBytes;
BOOL bRet = TRUE;
VDE_MSG((_T("[VDE] ++SVE_hw_power_control(%d)\r\n"), eParams));
pCtxt = SVE_get_context();
switch(eParams)
{
case HWPWR_ALL_ON:
dwIPIndex = PWR_IP_DISPCON; // Power On Display Controller
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_POST; // Power On Post Processor
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_ROTATOR; // Power On Image Rotator
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVENC; // Power On TV Encoder
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVSC; // Power On TV Scaler
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_ALL_OFF:
dwIPIndex = PWR_IP_DISPCON; // Power Off Display Controller
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_POST; // Power Off Post Processor
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_ROTATOR; // Power Off Image Rotator
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVENC; // Power Off TV Encoder
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVSC; // Power Off TV Scaler
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_DISPLAY_ON:
dwIPIndex = PWR_IP_DISPCON; // Power On Display Controller
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_DISPLAY_OFF:
dwIPIndex = PWR_IP_DISPCON; // Power Off Display Controller
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_POST_ON:
dwIPIndex = PWR_IP_POST; // Power On Post Processor
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_POST_OFF:
dwIPIndex = PWR_IP_POST; // Power Off Post Processor
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_ROTATOR_ON:
dwIPIndex = PWR_IP_ROTATOR; // Power On Image Rotator
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_ROTATOR_OFF:
dwIPIndex = PWR_IP_ROTATOR; // Power Off Image Rotator
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_TV_ON:
dwIPIndex = PWR_IP_TVENC; // Power On TV Encoder
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVSC; // Power On TV Scaler
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_TV_OFF:
dwIPIndex = PWR_IP_TVENC; // Power Off TV Encoder
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
dwIPIndex = PWR_IP_TVSC; // Power Off TV Scaler
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_2D_ON:
dwIPIndex = PWR_IP_2D; // Power On FIMG 2D
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_ON, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_ON Failed\n\r")));
bRet = FALSE;
}
break;
case HWPWR_2D_OFF:
dwIPIndex = PWR_IP_2D; // Power Off FIMG 2D
if ( !DeviceIoControl(pCtxt->hPowerControl, IOCTL_PWRCON_SET_POWER_OFF, &dwIPIndex, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
{
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : IOCTL_PWRCON_SET_POWER_OFF Failed\n\r")));
bRet = FALSE;
}
break;
default:
VDE_ERR((_T("[VDE:ERR] SVE_hw_power_control() : Unknown Parameter = %d\n\r"), eParams));
break;
}
VDE_MSG((_T("[VDE] --SVE_hw_power_control()\n\r")));
return bRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -