aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/remoteproc
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-10-18 15:33:49 -0700
committerColin Cross <ccross@android.com>2011-10-18 15:33:49 -0700
commit37ce04542e3a36cc41f69d16af36ff855809e2d0 (patch)
tree63ead98f46e6acd26048394e990ae68502602951 /drivers/remoteproc
parentb1c0891b9b2a426dffa6e0758e3b56a63f14ced8 (diff)
parent11e3f0c5a315443275af26947db879aebdee279f (diff)
downloadkernel_samsung_tuna-37ce04542e3a36cc41f69d16af36ff855809e2d0.tar.gz
kernel_samsung_tuna-37ce04542e3a36cc41f69d16af36ff855809e2d0.tar.bz2
kernel_samsung_tuna-37ce04542e3a36cc41f69d16af36ff855809e2d0.zip
Merge branch 'android-omap-3.0' into android-omap-tuna-3.0
Diffstat (limited to 'drivers/remoteproc')
-rw-r--r--drivers/remoteproc/omap_remoteproc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/remoteproc/omap_remoteproc.c b/drivers/remoteproc/omap_remoteproc.c
index 777342ee499..5548917c6b1 100644
--- a/drivers/remoteproc/omap_remoteproc.c
+++ b/drivers/remoteproc/omap_remoteproc.c
@@ -249,6 +249,8 @@ int omap_rproc_deactivate(struct omap_device *od)
#ifdef CONFIG_REMOTE_PROC_AUTOSUSPEND
struct omap_rproc_priv *rpp = rproc->priv;
#endif
+ if (pdata->clkdm)
+ clkdm_wakeup(pdata->clkdm);
for (i = 0; i < od->hwmods_cnt; i++) {
ret = omap_hwmod_shutdown(od->hwmods[i]);
@@ -271,6 +273,9 @@ int omap_rproc_deactivate(struct omap_device *od)
}
#endif
err:
+ if (pdata->clkdm)
+ clkdm_allow_idle(pdata->clkdm);
+
return ret;
}
@@ -287,6 +292,8 @@ static int omap_rproc_iommu_init(struct rproc *rproc,
if (!rpp)
return -ENOMEM;
+ if (pdata->clkdm)
+ clkdm_wakeup(pdata->clkdm);
iommu_set_isr(pdata->iommu_name, omap_rproc_iommu_isr, rproc);
iommu_set_secure(pdata->iommu_name, rproc->secure_mode,
rproc->secure_ttb);
@@ -312,12 +319,17 @@ static int omap_rproc_iommu_init(struct rproc *rproc,
goto err_map;
}
}
+ if (pdata->clkdm)
+ clkdm_allow_idle(pdata->clkdm);
+
return 0;
err_map:
iommu_put(iommu);
err_mmu:
iommu_set_secure(pdata->iommu_name, false, NULL);
+ if (pdata->clkdm)
+ clkdm_allow_idle(pdata->clkdm);
kfree(rpp);
return ret;
}
@@ -481,10 +493,16 @@ out:
static int omap_rproc_iommu_exit(struct rproc *rproc)
{
struct omap_rproc_priv *rpp = rproc->priv;
+ struct omap_rproc_pdata *pdata = rproc->dev->platform_data;
+
+ if (pdata->clkdm)
+ clkdm_wakeup(pdata->clkdm);
if (rpp->iommu)
iommu_put(rpp->iommu);
kfree(rpp);
+ if (pdata->clkdm)
+ clkdm_allow_idle(pdata->clkdm);
return 0;
}