diff options
author | Colin Cross <ccross@android.com> | 2011-10-18 15:33:49 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-10-18 15:33:49 -0700 |
commit | 37ce04542e3a36cc41f69d16af36ff855809e2d0 (patch) | |
tree | 63ead98f46e6acd26048394e990ae68502602951 /drivers/remoteproc | |
parent | b1c0891b9b2a426dffa6e0758e3b56a63f14ced8 (diff) | |
parent | 11e3f0c5a315443275af26947db879aebdee279f (diff) | |
download | kernel_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.c | 18 |
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; } |