diff options
Diffstat (limited to 'drivers/mxc/vpu/mxc_vpu.c')
-rw-r--r-- | drivers/mxc/vpu/mxc_vpu.c | 9 |
1 files changed, 9 insertions, 0 deletions
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); |