⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 power.cpp

📁 Sm501 VGA芯片wince下驱动代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(800, 480, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(800, 480, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////////
	// Init 800x600

	// 8 bit per pixel
	INIT_CLOCK_INFO_RES(800, 600, 8)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(800, 600, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(800, 600, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////////
	// Init 1024x600

	// 8 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 600, 8)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 600, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 600, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////////
	// Init 1024x768

	// 8 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 768, 8)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 768, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(1024, 768, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////////
	// Init 1280x960

	// 8 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 960, 8)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 960, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 960, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////////
	// Init 1280x1200

	// 8 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 1200, 8)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 16 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 1200, 16)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	// 32 bit per pixel
	INIT_CLOCK_INFO_RES(1280, 1200, 32)

	INIT_CLOCK_INFO_POWER(VGXPowerOn)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_72()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_144()

	INIT_CLOCK_INFO_POWER(VGXPowerReduced)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()

	INIT_CLOCK_INFO_POWER (VGXPowerMinimal)
	INIT_CLOCK_INFO_PLL2(288)
	INIT_CLOCK_INFO_PLL2_288_MCLK_36()
	INIT_CLOCK_INFO_PLL2_288_M2XCLK_72()


	///////////////////////////////////////////////////////////////////////
	// Set default idle counters for the Power Monitor

	SetIdle(
		MIN2TICKS(2),						// 2 minutes before Reduced Mode
		MIN2TICKS(4));						// 4 minutes before Minimal Mode


	///////////////////////////////////////////////////////////////////////
	// Set initial state of the Power Monitor

	SetMonitorEnabled(
		m_SMISettings.m_bEnablePowerMonitor);


	///////////////////////////////////////////////////////////////////////
	// Init power info for all monitored modules

	INITPOWERINFO(2D,  MIN2TICKS(6))		// Power info for 2D Engine.
//	INITPOWERINFO(PWM, MIN2TICKS(6))		// Power info for PWM.
//	INITPOWERINFO(I2C, MIN2TICKS(6))		// Power info for I2C.


	MESSAGE(MESSAGE_ZONE, (TEXT("-SMI::InitPowerManagement\r\n")));

	return VGXPM_RET_SUCCESS;
}


///////////////////////////////////////////////////////////////////////////////
// Starts the power thread.

DWORD SMI::StartPowerManagement()
{
	MESSAGE(MESSAGE_ZONE, (TEXT("+SMI::StartPowerManagement\r\n")));

	DWORD dwResult = VGXPM_RET_SUCCESS;

	///////////////////////////////////////////////////////////////////////////
	// Set initial power states

	DWORD dwPowerMask = 0;
	DWORD dwPowerGate = 0;

	// Disable 8051
	if (!IsAudioDriverPresent())
	{
		dwPowerMask |=
			_F_MASK(CURRENT_POWER_GATE_8051);
		dwPowerGate = FIELD_SET(dwPowerGate, CURRENT_POWER_GATE, 8051, DISABLE);
	}

	// Determine whether USB driver is loaded or not
	if (!IsUSBDriverPresent())
	{
		// USB is not loaded - dsiable the gate
		dwPowerMask |=
			_F_MASK(CURRENT_POWER_GATE_USB_SLAVE) |
			_F_MASK(CURRENT_POWER_GATE_USB_HOST);
		dwPowerGate = FIELD_SET(dwPowerGate, CURRENT_POWER_GATE, USB_SLAVE, DISABLE);
		dwPowerGate = FIELD_SET(dwPowerGate, CURRENT_POWER_GATE, USB_HOST,  DISABLE);
	}

	setGate(dwPowerMask, dwPowerGate);


	///////////////////////////////////////////////////////////////////////
	// Turn all managable modules off by default

	for (INT i = 0; i < VGXPM_MODULE_COUNT; i++)
	{
		SetModulePower((VGXPM_MODULES)i, VGXPowerOff);
	}


	///////////////////////////////////////////////////////////////////////
	// Enter full power mode by default

	SetVGXPowerManagement(VGXPowerOn);


	if (m_SMISettings.m_bEnablePowerMonitor)
	{
		dwResult = StartPowerThread();
	}

	MESSAGE(MESSAGE_ZONE, (TEXT("-SMI::StartPowerManagement\r\n")));

	return dwResult;
}


///////////////////////////////////////////////////////////////////////////////
// Starts the thread.

DWORD SMI::StartPowerThread()
{
	MESSAGE(MESSAGE_ZONE, (TEXT("+SMI::StartPowerThread\r\n")));

	DWORD dwResult = VGXPM_RET_NOT_SUPPORTED;

#ifdef USE_WATCHDOG

	///////////////////////////////////////////////////////////////////////
	// Activity flag.

	static BOOL bStarted = FALSE;


	if (!bStarted)
	{
		///////////////////////////////////////////////////////////////////////
		// Create a message queue.

		if (m_hPMMessageQueue == NULL)
		{
			MSGQUEUEOPTIONS MsgQueueOptions;
			MsgQueueOptions.dwSize        = sizeof(MsgQueueOptions);
			MsgQueueOptions.dwFlags       = 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -