1*4882a593SmuzhiyunThis patch adjusts the omap3630 portion of the powervr driver to use the new 2*4882a593Smuzhiyunclk kernel api. 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunSigned-off-by: Spenser Gilliland <spenser@gillilanding.com> 5*4882a593Smuzhiyun[yann.morin.1998@free.fr: rebased ontop of 5.01.00.01] 6*4882a593SmuzhiyunSigned-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> 7*4882a593Smuzhiyundiff -durN ti-gfx-5_01_00_01.orig/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c ti-gfx-5_01_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c 8*4882a593Smuzhiyun--- ti-gfx-5_01_00_01.orig/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c 2013-12-23 15:44:20.000000000 +0100 9*4882a593Smuzhiyun+++ ti-gfx-5_01_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c 2014-02-26 19:17:39.829571846 +0100 10*4882a593Smuzhiyun@@ -182,6 +182,49 @@ 11*4882a593Smuzhiyun @Return PVRSRV_ERROR 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun ******************************************************************************/ 14*4882a593Smuzhiyun+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) 15*4882a593Smuzhiyun+int clk_disable_unprepare(struct clk *clk) 16*4882a593Smuzhiyun+{ 17*4882a593Smuzhiyun+ return clk_disable(clk); 18*4882a593Smuzhiyun+} 19*4882a593Smuzhiyun+#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) 20*4882a593Smuzhiyun+int clk_disable_unprepare(struct clk *clk) 21*4882a593Smuzhiyun+{ 22*4882a593Smuzhiyun+ res = clk_disable(clk); 23*4882a593Smuzhiyun+ if (res < 0) 24*4882a593Smuzhiyun+ return res; 25*4882a593Smuzhiyun+ 26*4882a593Smuzhiyun+ res = clk_unprepare(clk); 27*4882a593Smuzhiyun+ if (ret < 0) 28*4882a593Smuzhiyun+ return res; 29*4882a593Smuzhiyun+ 30*4882a593Smuzhiyun+ return 0; 31*4882a593Smuzhiyun+} 32*4882a593Smuzhiyun+#endif 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun+ 35*4882a593Smuzhiyun+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) 36*4882a593Smuzhiyun+int clk_prepare_enable(struct clk *clk) 37*4882a593Smuzhiyun+{ 38*4882a593Smuzhiyun+ return clk_enable(clk); 39*4882a593Smuzhiyun+} 40*4882a593Smuzhiyun+#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) 41*4882a593Smuzhiyun+int clk_prepare_enable(struct clk *clk) 42*4882a593Smuzhiyun+{ 43*4882a593Smuzhiyun+ res = clk_prepare(clk); 44*4882a593Smuzhiyun+ if (ret < 0) 45*4882a593Smuzhiyun+ return res; 46*4882a593Smuzhiyun+ 47*4882a593Smuzhiyun+ res = clk_enable(clk); 48*4882a593Smuzhiyun+ if (res < 0) { 49*4882a593Smuzhiyun+ clk_unprepare(clk); 50*4882a593Smuzhiyun+ return res; 51*4882a593Smuzhiyun+ } 52*4882a593Smuzhiyun+ 53*4882a593Smuzhiyun+ return 0; 54*4882a593Smuzhiyun+} 55*4882a593Smuzhiyun+#endif 56*4882a593Smuzhiyun+ 57*4882a593Smuzhiyun PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) 58*4882a593Smuzhiyun { 59*4882a593Smuzhiyun #if !defined(NO_HARDWARE) 60*4882a593Smuzhiyun@@ -198,7 +241,7 @@ 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #if !defined(PM_RUNTIME_SUPPORT) 63*4882a593Smuzhiyun PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks")); 64*4882a593Smuzhiyun- res=clk_enable(psSysSpecData->psSGX_FCK); 65*4882a593Smuzhiyun+ res=clk_prepare_enable(psSysSpecData->psSGX_FCK); 66*4882a593Smuzhiyun if (res < 0) 67*4882a593Smuzhiyun { 68*4882a593Smuzhiyun PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); 69*4882a593Smuzhiyun@@ -324,7 +367,7 @@ 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks")); 72*4882a593Smuzhiyun #if !defined(PM_RUNTIME_SUPPORT) 73*4882a593Smuzhiyun- clk_disable(psSysSpecData->psSGX_FCK); 74*4882a593Smuzhiyun+ clk_disable_unprepare(psSysSpecData->psSGX_FCK); 75*4882a593Smuzhiyun #endif 76*4882a593Smuzhiyun SysDisableSGXInterrupts(psSysData); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun@@ -540,14 +583,14 @@ 79*4882a593Smuzhiyun rate = clk_get_rate(psSysSpecData->psGPT11_FCK); 80*4882a593Smuzhiyun PVR_TRACE(("GPTIMER11 clock is %dMHz", HZ_TO_MHZ(rate))); 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun- res = clk_enable(psSysSpecData->psGPT11_FCK); 83*4882a593Smuzhiyun+ res = clk_prepare_enable(psSysSpecData->psGPT11_FCK); 84*4882a593Smuzhiyun if (res < 0) 85*4882a593Smuzhiyun { 86*4882a593Smuzhiyun PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 functional clock (%d)", res)); 87*4882a593Smuzhiyun goto ExitError; 88*4882a593Smuzhiyun } 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun- res = clk_enable(psSysSpecData->psGPT11_ICK); 91*4882a593Smuzhiyun+ res = clk_prepare_enable(psSysSpecData->psGPT11_ICK); 92*4882a593Smuzhiyun if (res < 0) 93*4882a593Smuzhiyun { 94*4882a593Smuzhiyun PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 interface clock (%d)", res)); 95*4882a593Smuzhiyun@@ -610,9 +653,9 @@ 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun ExitDisableGPT11ICK: 98*4882a593Smuzhiyun #if defined(PVR_OMAP4_TIMING_PRCM) 99*4882a593Smuzhiyun- clk_disable(psSysSpecData->psGPT11_ICK); 100*4882a593Smuzhiyun+ clk_disable_unprepare(psSysSpecData->psGPT11_ICK); 101*4882a593Smuzhiyun ExitDisableGPT11FCK: 102*4882a593Smuzhiyun- clk_disable(psSysSpecData->psGPT11_FCK); 103*4882a593Smuzhiyun+ clk_disable_unprepare(psSysSpecData->psGPT11_FCK); 104*4882a593Smuzhiyun ExitError: 105*4882a593Smuzhiyun #endif /* defined(PVR_OMAP4_TIMING_PRCM) */ 106*4882a593Smuzhiyun eError = PVRSRV_ERROR_CLOCK_REQUEST_FAILED; 107*4882a593Smuzhiyun@@ -664,9 +707,9 @@ 108*4882a593Smuzhiyun psSysSpecData->sTimerRegPhysBase.uiAddr = 0; 109*4882a593Smuzhiyun #endif 110*4882a593Smuzhiyun #if defined(PVR_OMAP4_TIMING_PRCM) 111*4882a593Smuzhiyun- clk_disable(psSysSpecData->psGPT11_ICK); 112*4882a593Smuzhiyun+ clk_disable_unprepare(psSysSpecData->psGPT11_ICK); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun- clk_disable(psSysSpecData->psGPT11_FCK); 115*4882a593Smuzhiyun+ clk_disable_unprepare(psSysSpecData->psGPT11_FCK); 116*4882a593Smuzhiyun #endif /* defined(PVR_OMAP4_TIMING_PRCM) */ 117*4882a593Smuzhiyun } 118*4882a593Smuzhiyun #endif /* PVR_OMAP_USE_DM_TIMER_API */ 119