summaryrefslogtreecommitdiff
path: root/drivers/mxc/vpu/mxc_vpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc/vpu/mxc_vpu.c')
-rw-r--r--drivers/mxc/vpu/mxc_vpu.c9
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);