/* * Function called when the driver must resume */ static void DriverResume(void) { struct OMAP_DISP_DEVINFO *psDevInfo; int i; if(!pDisplayDevices) return; for(i = 0; i < display_devices_count; i++) { psDevInfo = &pDisplayDevices[i]; mutex_lock(&psDevInfo->sSwapChainLockMutex); if (!psDevInfo->bDeviceSuspended) { mutex_unlock(&psDevInfo->sSwapChainLockMutex); continue; } SetFlushStateInternalNoLock(psDevInfo, OMAP_FALSE); psDevInfo->bDeviceSuspended = OMAP_FALSE; mutex_unlock(&psDevInfo->sSwapChainLockMutex); } }
static IMG_VOID SetFlushStateInternal(OMAPLFB_DEVINFO* psDevInfo, OMAP_BOOL bFlushState) { unsigned long ulLockFlags; spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); SetFlushStateInternalNoLock(psDevInfo, bFlushState); spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); }
/* * Sets the flush state of the specified display device * at device level blocking the call if needed. * in: psDevInfo, bFlushState */ static void SetFlushStateExternal(struct OMAP_DISP_DEVINFO* psDevInfo, enum OMAP_BOOL bFlushState) { DEBUG_PRINTK("Executing for display %lu", psDevInfo->ulDeviceID); mutex_lock(&psDevInfo->sSwapChainLockMutex); if (psDevInfo->bFlushCommands != bFlushState) { psDevInfo->bFlushCommands = bFlushState; SetFlushStateInternalNoLock(psDevInfo, bFlushState); } mutex_unlock(&psDevInfo->sSwapChainLockMutex); }
static void SetFlushStateExternal(OMAPLFB_DEVINFO* psDevInfo, OMAP_BOOL bFlushState) { unsigned long ulLockFlags; spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); if (psDevInfo->bFlushCommands != bFlushState) { psDevInfo->bFlushCommands = bFlushState; SetFlushStateInternalNoLock(psDevInfo, bFlushState); } spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); }
void OMAPLFBDriverResume(void) { OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); unsigned long ulLockFlags; if (psDevInfo->bDeviceSuspended == OMAP_FALSE) { return; } spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); SetFlushStateInternalNoLock(psDevInfo, OMAP_FALSE); psDevInfo->bDeviceSuspended = OMAP_FALSE; spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); }
void OMAPLFBDriverSuspend(void) { OMAPLFB_DEVINFO *psDevInfo = GetAnchorPtr(); unsigned long ulLockFlags; spin_lock_irqsave(&psDevInfo->sSwapChainLock, ulLockFlags); if (psDevInfo->bDeviceSuspended) { goto ExitUnlock; } psDevInfo->bDeviceSuspended = OMAP_TRUE; SetFlushStateInternalNoLock(psDevInfo, OMAP_TRUE); ExitUnlock: spin_unlock_irqrestore(&psDevInfo->sSwapChainLock, ulLockFlags); }