static void __exit s3c_jpeg_exit(void) { DWORD ret; JPEG_LOG_MSG(LOG_TRACE, "s3c_jpeg_exit", "JPG_Deinit\n"); ret = LockJPGMutex(); if(!ret){ JPEG_LOG_MSG(LOG_ERROR, "s3c_jpeg_exit", "DD::JPG Mutex Lock Fail\r\n"); } JPGMemFree(&JPGMem); UnlockJPGMutex(); DeleteJPGMutex(); platform_driver_unregister(&s3c_jpeg_driver); printk("S3C JPEG driver module exit\n"); }
/*---------------------------------------------------------------------------- *Function: JPG_DeInit *Parameters: InitHandle : *Return Value: True/False *Implementation Notes: Deinitialize JPEG Hardware -----------------------------------------------------------------------------*/ BOOL JPG_Deinit( DWORD InitHandle ) { DWORD ret; S3C6410_JPG_CTX *JPGRegCtx; RETAILMSG(ZONE_FUNCTION, (TEXT("JPG_Deinit().\r\n"))); JPGRegCtx = (S3C6410_JPG_CTX *)InitHandle; if(!JPGRegCtx) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Invalid Input Handle\r\n"))); return FALSE; } ret = LockJPGMutex(); if(!ret) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Mutex Lock Fail\r\n"))); return FALSE; } JPGBuffFree(JPGRegCtx); JPGMemFree(JPGRegCtx); free(JPGRegCtx); UnlockJPGMutex(); DeleteJPGMutex(); if (hPwrControl) CloseHandle(hPwrControl); if (s6410PWR) FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return TRUE; }
/*---------------------------------------------------------------------------- *Function: JPG_Init *Parameters: dwContext : *Return Value: True/False *Implementation Notes: Initialize JPEG Hardware -----------------------------------------------------------------------------*/ DWORD JPG_Init( DWORD dwContext ) { S3C6410_JPG_CTX *JPGRegCtx; HANDLE h_Mutex; DWORD ret; RETAILMSG(ZONE_FUNCTION, (TEXT("JPG_Init().\r\n"))); // PWM clock Virtual alloc s6410PWR = (S3C6410_SYSCON_REG *)Phy2VirAddr(S3C6410_BASE_REG_PA_SYSCON, sizeof(S3C6410_SYSCON_REG)); if (s6410PWR == NULL) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG::For s6410PWR: MmMapIoSpace failed!\r\n"))); return FALSE;; } hPwrControl = CreateFile( L"PWC0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == hPwrControl ) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::PWC0 Open Device Failed\r\n"))); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } if(JPGSetClkDiv(JPG_CLOCK_DIVIDER_RATIO_QUARTER) == FALSE) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG :: Set Clock Divider Failed\r\n"))); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } // Mutex initialization h_Mutex = CreateJPGmutex(); if (h_Mutex == NULL) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JJPG Mutex Initialize error : %d\n"),GetLastError())); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } ret = LockJPGMutex(); if(!ret) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Mutex Lock Fail\r\n"))); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } // Register/Memory initialization JPGRegCtx = (S3C6410_JPG_CTX *)malloc(sizeof(S3C6410_JPG_CTX)); if (!JPGRegCtx) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Memory Context Allocation Fail\r\n"))); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } memset(JPGRegCtx, 0x00, sizeof(S3C6410_JPG_CTX)); if( !JPGMemMapping(JPGRegCtx) ) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JPEG-HOST-MEMORY Initialize error : %d\r\n"),GetLastError())); free(JPGRegCtx); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } else { if(!JPGBuffMapping(JPGRegCtx)) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JPEG-DATA-MEMORY Initialize error : %d\r\n"),GetLastError())); JPGMemFree(JPGRegCtx); free(JPGRegCtx); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } } instanceNo = 0; UnlockJPGMutex(); return (DWORD)JPGRegCtx; }