summaryrefslogtreecommitdiff
path: root/drivers/mxc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc')
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c5
-rw-r--r--drivers/mxc/vpu/mxc_vpu.c9
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
index 58a2d5e344e8..1afd1332eae5 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
@@ -6801,6 +6801,7 @@ gckOS_GetThreadID(
**
** Nothing.
*/
+extern struct mutex set_cpufreq_lock;
gceSTATUS
gckOS_SetGPUPower(
IN gckOS Os,
@@ -6843,8 +6844,10 @@ gckOS_SetGPUPower(
if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+ mutex_lock(&set_cpufreq_lock);
if(!IS_ERR(Os->device->gpu_regulator))
regulator_enable(Os->device->gpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
#else
imx_gpc_power_up_pu(true);
#endif
@@ -6960,8 +6963,10 @@ gckOS_SetGPUPower(
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+ mutex_lock(&set_cpufreq_lock);
if(!IS_ERR(Os->device->gpu_regulator))
regulator_disable(Os->device->gpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
#else
imx_gpc_power_up_pu(false);
#endif
diff --git a/drivers/mxc/vpu/mxc_vpu.c b/drivers/mxc/vpu/mxc_vpu.c
index 8a219db2e4a5..03f2be8c8b67 100644
--- a/drivers/mxc/vpu/mxc_vpu.c
+++ b/drivers/mxc/vpu/mxc_vpu.c
@@ -113,6 +113,7 @@ static int vpu_jpu_irq;
static unsigned int regBk[64];
static struct regulator *vpu_regulator;
static unsigned int pc_before_suspend;
+extern struct mutex set_cpufreq_lock;
#define READ_REG(x) __raw_readl(vpu_base + x)
#define WRITE_REG(val, x) __raw_writel(val, vpu_base + x)
@@ -252,8 +253,10 @@ static int vpu_open(struct inode *inode, struct file *filp)
mutex_lock(&vpu_data.lock);
if (open_count++ == 0) {
+ mutex_lock(&set_cpufreq_lock);
if (!IS_ERR(vpu_regulator))
regulator_enable(vpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
#ifdef CONFIG_SOC_IMX6Q
clk_enable(vpu_clk);
@@ -634,8 +637,10 @@ static int vpu_release(struct inode *inode, struct file *filp)
for (i = 0; i < vpu_clk_usercount; i++)
clk_disable(vpu_clk);
+ mutex_lock(&set_cpufreq_lock);
if (!IS_ERR(vpu_regulator))
regulator_disable(vpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
}
mutex_unlock(&vpu_data.lock);
@@ -924,8 +929,10 @@ static int vpu_suspend(struct platform_device *pdev, pm_message_t state)
/* If VPU is working before suspend, disable
* regulator to make usecount right. */
+ mutex_lock(&set_cpufreq_lock);
if (!IS_ERR(vpu_regulator))
regulator_disable(vpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
}
mutex_unlock(&vpu_data.lock);
@@ -952,8 +959,10 @@ static int vpu_resume(struct platform_device *pdev)
/* If VPU is working before suspend, enable
* regulator to make usecount right. */
+ mutex_lock(&set_cpufreq_lock);
if (!IS_ERR(vpu_regulator))
regulator_enable(vpu_regulator);
+ mutex_unlock(&set_cpufreq_lock);
if (vpu_plat->pg)
vpu_plat->pg(0);