Ejemplo n.º 1
0
static enum PVRSRV_ERROR PVRSRVDevicePostPowerStateKM(IMG_BOOL bAllDevices,
					  u32 ui32DeviceIndex,
					  enum PVR_POWER_STATE eNewPowerState)
{
	enum PVRSRV_ERROR eError;
	struct SYS_DATA *psSysData;
	struct PVRSRV_POWER_DEV *psPowerDevice;
	enum PVR_POWER_STATE eNewDevicePowerState;

	eError = SysAcquireData(&psSysData);
	if (eError != PVRSRV_OK)
		return eError;

	psPowerDevice = psSysData->psPowerDeviceList;
	while (psPowerDevice) {
		if (bAllDevices ||
		    (ui32DeviceIndex == psPowerDevice->ui32DeviceIndex)) {
			eNewDevicePowerState = (eNewPowerState ==
			     PVRSRV_POWER_Unspecified) ? psPowerDevice->
			     eDefaultPowerState : eNewPowerState;

			if (psPowerDevice->eCurrentPowerState !=
			    eNewDevicePowerState) {
				eError = SysDevicePostPowerState(
					    psPowerDevice->ui32DeviceIndex,
					    eNewDevicePowerState,
					    psPowerDevice->eCurrentPowerState);
				if (eError != PVRSRV_OK) {
					pr_err("SysDevicePostPowerState "
						"failed (%u)\n", eError);
					return eError;
				}

				if (psPowerDevice->pfnPostPower != NULL) {
					eError =
					    psPowerDevice->
					    pfnPostPower(psPowerDevice->
							 hDevCookie,
							 eNewDevicePowerState,
							 psPowerDevice->
							 eCurrentPowerState);
					if (eError != PVRSRV_OK) {
						pr_err
						    ("pfnPostPower failed "
						     "(%u)\n", eError);
						return eError;
					}
				}

				psPowerDevice->eCurrentPowerState =
				    eNewDevicePowerState;
			}
		}

		psPowerDevice = psPowerDevice->psNext;
	}

	return PVRSRV_OK;
}
Ejemplo n.º 2
0
PVRSRV_ERROR PVRSRVDevicePostPowerStateKM_AnyVaCb(PVRSRV_POWER_DEV *psPowerDevice, va_list va)
{
	PVRSRV_DEV_POWER_STATE	eNewDevicePowerState;
	PVRSRV_ERROR			eError;


	IMG_BOOL				bAllDevices;
	IMG_UINT32				ui32DeviceIndex;
	PVRSRV_DEV_POWER_STATE	eNewPowerState;


	bAllDevices = va_arg(va, IMG_BOOL);
	ui32DeviceIndex = va_arg(va, IMG_UINT32);
	eNewPowerState = va_arg(va, PVRSRV_DEV_POWER_STATE);

	if (bAllDevices || (ui32DeviceIndex == psPowerDevice->ui32DeviceIndex))
	{
		eNewDevicePowerState = (eNewPowerState == PVRSRV_DEV_POWER_STATE_DEFAULT) ?
								psPowerDevice->eDefaultPowerState : eNewPowerState;

		if (psPowerDevice->eCurrentPowerState != eNewDevicePowerState)
		{

			eError = SysDevicePostPowerState(psPowerDevice->ui32DeviceIndex,
											 eNewDevicePowerState,
											 psPowerDevice->eCurrentPowerState);
			if (eError != PVRSRV_OK)
			{
				return eError;
			}

			if (psPowerDevice->pfnPostPower != IMG_NULL)
			{

				eError = psPowerDevice->pfnPostPower(psPowerDevice->hDevCookie,
													 eNewDevicePowerState,
													 psPowerDevice->eCurrentPowerState);
				if (eError != PVRSRV_OK)
				{
					return eError;
				}
			}

			psPowerDevice->eCurrentPowerState = eNewDevicePowerState;
		}
	}
	return PVRSRV_OK;
}