void OMAPLFBSwapHandler(OMAPLFB_BUFFER *psBuffer) { OMAPLFB_DEVINFO *psDevInfo = psBuffer->psDevInfo; OMAPLFB_SWAPCHAIN *psSwapChain = psDevInfo->psSwapChain; OMAPLFB_BOOL bPreviouslyNotVSynced; #if defined(SUPPORT_DRI_DRM) if (!OMAPLFBAtomicBoolRead(&psDevInfo->sLeaveVT)) #endif { OMAPLFBFlip(psDevInfo, psBuffer); } bPreviouslyNotVSynced = psSwapChain->bNotVSynced; psSwapChain->bNotVSynced = OMAPLFB_TRUE; if (!DontWaitForVSync(psDevInfo)) { OMAPLFB_UPDATE_MODE eMode = OMAPLFBGetUpdateMode(psDevInfo); int iBlankEvents = OMAPLFBAtomicIntRead(&psDevInfo->sBlankEvents); switch(eMode) { case OMAPLFB_UPDATE_MODE_AUTO: psSwapChain->bNotVSynced = OMAPLFB_FALSE; if (bPreviouslyNotVSynced || psSwapChain->iBlankEvents != iBlankEvents) { psSwapChain->iBlankEvents = iBlankEvents; psSwapChain->bNotVSynced = !WaitForVSyncSettle(psDevInfo); } else if (psBuffer->ulSwapInterval != 0) { psSwapChain->bNotVSynced = !OMAPLFBWaitForVSync(psDevInfo); } break; #if defined(PVR_OMAPFB3_MANUAL_UPDATE_SYNC_IN_SWAP) case OMAPLFB_UPDATE_MODE_MANUAL: if (psBuffer->ulSwapInterval != 0) { (void) OMAPLFBManualSync(psDevInfo); } break; #endif default: break; } } psDevInfo->sPVRJTable.pfnPVRSRVCmdComplete((IMG_HANDLE)psBuffer->hCmdComplete, IMG_TRUE); }
/* * If the screen is manual or auto update mode, wait for the screen to * update. */ OMAPLFB_BOOL OMAPLFBCheckModeAndSync(OMAPLFB_DEVINFO *psDevInfo) { OMAPLFB_UPDATE_MODE eMode = OMAPLFBGetUpdateMode(psDevInfo); switch(eMode) { case OMAPLFB_UPDATE_MODE_AUTO: case OMAPLFB_UPDATE_MODE_MANUAL: return OMAPLFBManualSync(psDevInfo); default: break; } return OMAPLFB_TRUE; }
void OMAPLFBPrintInfo(OMAPLFB_DEVINFO *psDevInfo) { #if defined(PVR_OMAPLFB_DRM_FB) struct drm_connector *psConnector; unsigned uConnectors; unsigned uConnector; DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": Device %u: DRM framebuffer\n", psDevInfo->uiFBDevID)); for (psConnector = NULL, uConnectors = 0; (psConnector = omap_fbdev_get_next_connector(psDevInfo->psLINFBInfo, psConnector)) != NULL;) { uConnectors++; } DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": Device %u: Number of screens (DRM connectors): %u\n", psDevInfo->uiFBDevID, uConnectors)); if (uConnectors == 0) { return; } for (psConnector = NULL, uConnector = 0; (psConnector = omap_fbdev_get_next_connector(psDevInfo->psLINFBInfo, psConnector)) != NULL; uConnector++) { enum omap_dss_update_mode eMode = omap_connector_get_update_mode(psConnector); DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": Device %u: Screen %u: %s (%d)\n", psDevInfo->uiFBDevID, uConnector, OMAPLFBDSSUpdateModeToString(eMode), (int)eMode)); } #else /* defined(PVR_OMAPLFB_DRM_FB) */ //#if defined(PVR_OMAPLFB_HAS_UPDATE_MODE) OMAPLFB_UPDATE_MODE eMode = OMAPLFBGetUpdateMode(psDevInfo); //DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": Device %u: %s\n", psDevInfo->uiFBDevID, OMAPLFBUpdateModeToString(eMode))); //#endif DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": Device %u: non-DRM framebuffer\n", psDevInfo->uiFBDevID)); #endif /* defined(PVR_OMAPLFB_DRM_FB) */ }