MTKLFB_ERROR MTKLFBInit(void) { unsigned uiMaxFBDevIDPlusOne = MTKLFBMaxFBDevIDPlusOne(); unsigned i; unsigned uiDevicesFound = 0; if(MTKLFBGetLibFuncAddr ("PVRGetDisplayClassJTable", &gpfnGetPVRJTable) != MTKLFB_OK) { return MTKLFB_ERROR_INIT_FAILURE; } for(i = uiMaxFBDevIDPlusOne; i-- != 0;) { MTKLFB_DEVINFO *psDevInfo = MTKLFBInitDev(i); if (psDevInfo != NULL) { MTKLFBSetDevInfoPtr(psDevInfo->uiFBDevID, psDevInfo); uiDevicesFound++; } } return (uiDevicesFound != 0) ? MTKLFB_OK : MTKLFB_ERROR_INIT_FAILURE; }
MTKLFB_DEVINFO *MTKLFBGetDevInfoPtr(unsigned uiFBDevID) { WARN_ON(uiFBDevID >= MTKLFBMaxFBDevIDPlusOne()); if (uiFBDevID >= MTKLFB_MAX_NUM_DEVICES) { return NULL; } return gapsDevInfo[uiFBDevID]; }
static void MTKLFBEarlyResumeHandler(struct early_suspend *h) { unsigned uiMaxFBDevIDPlusOne = MTKLFBMaxFBDevIDPlusOne(); unsigned i; for (i=0; i < uiMaxFBDevIDPlusOne; i++) { MTKLFB_DEVINFO *psDevInfo = MTKLFBGetDevInfoPtr(i); if (psDevInfo != NULL) { MTKLFBUnblankDisplay(psDevInfo); MTKLFBAtomicBoolSet(&psDevInfo->sEarlySuspendFlag, MTKLFB_FALSE); } } }
MTKLFB_ERROR MTKLFBDeInit(void) { unsigned uiMaxFBDevIDPlusOne = MTKLFBMaxFBDevIDPlusOne(); unsigned i; MTKLFB_BOOL bError = MTKLFB_FALSE; for(i = 0; i < uiMaxFBDevIDPlusOne; i++) { MTKLFB_DEVINFO *psDevInfo = MTKLFBGetDevInfoPtr(i); if (psDevInfo != NULL) { bError |= !MTKLFBDeInitDev(psDevInfo); } } return (bError) ? MTKLFB_ERROR_INIT_FAILURE : MTKLFB_OK; }
static MTKLFB_DEVINFO *MTKLFBPVRDevIDToDevInfo(unsigned uiPVRDevID) { unsigned uiMaxFBDevIDPlusOne = MTKLFBMaxFBDevIDPlusOne(); unsigned i; for (i=0; i < uiMaxFBDevIDPlusOne; i++) { MTKLFB_DEVINFO *psDevInfo = MTKLFBGetDevInfoPtr(i); if (psDevInfo->uiPVRDevID == uiPVRDevID) { return psDevInfo; } } printk(KERN_WARNING DRIVER_PREFIX ": %s: PVR Device %u: Couldn't find device\n", __FUNCTION__, uiPVRDevID); return NULL; }
static PVRSRV_ERROR OpenDCDevice(IMG_UINT32 uiPVRDevID, IMG_HANDLE *phDevice, PVRSRV_SYNC_DATA* psSystemBufferSyncData) { MTKLFB_DEVINFO *psDevInfo; MTKLFB_ERROR eError; unsigned uiMaxFBDevIDPlusOne = MTKLFBMaxFBDevIDPlusOne(); unsigned i; for (i = 0; i < uiMaxFBDevIDPlusOne; i++) { psDevInfo = MTKLFBGetDevInfoPtr(i); if (psDevInfo != NULL && psDevInfo->uiPVRDevID == uiPVRDevID) { break; } } if (i == uiMaxFBDevIDPlusOne) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: PVR Device %u not found\n", __FUNCTION__, uiPVRDevID)); return PVRSRV_ERROR_INVALID_DEVICE; } psDevInfo->sSystemBuffer.psSyncData = psSystemBufferSyncData; eError = MTKLFBUnblankDisplay(psDevInfo); if (eError != MTKLFB_OK) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: MTKLFBUnblankDisplay failed (%d)\n", __FUNCTION__, psDevInfo->uiFBDevID, eError)); return PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED; } *phDevice = (IMG_HANDLE)psDevInfo; return PVRSRV_OK; }