exynos/mfc: add sysmmu power on/off calls
authorPrathyush K <prathyush.k@samsung.com>
Tue, 31 Jul 2012 07:50:52 +0000 (13:20 +0530)
committerChromeBot <chrome-bot@google.com>
Wed, 20 Mar 2013 09:04:57 +0000 (02:04 -0700)
This patch calls the sysmmu driver helper functions for resuming
and suspending its two sysmmus during mfc power on/off. This is required
for the sysmmus to resume/suspend along with the parent mfc device.

BUG=chrome-os-partner:11793
TEST=MFC/GSC/Sysmmu get suspended after probe and resume upon
video playback. Tested on Daisy.

Change-Id: I3faacf3dfc397c72402e9c981ff314007c94887d
Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Reviewed-on: https://gerrit.chromium.org/gerrit/29165
Tested-by: Prathyush Kalashwaram <prathyush@chromium.org>
Reviewed-by: Olof Johansson <olofj@chromium.org>
Commit-Ready: Olof Johansson <olofj@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42960
Commit-Queue: John Sheu <sheu@chromium.org>
Reviewed-by: John Sheu <sheu@chromium.org>
Tested-by: John Sheu <sheu@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44767

drivers/media/video/s5p-mfc/s5p_mfc_pm.c

index 6aa38a5..1532b23 100644 (file)
@@ -16,6 +16,7 @@
 #ifdef CONFIG_PM_RUNTIME
 #include <linux/pm_runtime.h>
 #endif
+#include <mach/sysmmu.h>
 #include "s5p_mfc_common.h"
 #include "s5p_mfc_debug.h"
 #include "s5p_mfc_pm.h"
@@ -116,7 +117,27 @@ void s5p_mfc_clock_off(void)
 int s5p_mfc_power_on(void)
 {
 #ifdef CONFIG_PM_RUNTIME
-       return pm_runtime_get_sync(pm->device);
+       int ret;
+       ret = pm_runtime_get_sync(pm->device);
+       if (ret < 0)
+               goto out;
+
+       ret = platform_sysmmu_on(p_dev->mem_dev_l);
+       if (ret < 0)
+               goto out_err;
+
+       ret = platform_sysmmu_on(p_dev->mem_dev_r);
+       if (ret < 0)
+               goto out_err2;
+
+       return ret;
+
+out_err2:
+       platform_sysmmu_off(p_dev->mem_dev_l);
+out_err:
+       pm_runtime_put_sync(pm->device);
+out:
+       return ret;
 #else
        atomic_set(&pm->power, 1);
        return 0;
@@ -126,7 +147,10 @@ int s5p_mfc_power_on(void)
 int s5p_mfc_power_off(void)
 {
 #ifdef CONFIG_PM_RUNTIME
-       return pm_runtime_put_sync(pm->device);
+       pm_runtime_put_sync(pm->device);
+       platform_sysmmu_off(p_dev->mem_dev_l);
+       platform_sysmmu_off(p_dev->mem_dev_r);
+       return 0;
 #else
        atomic_set(&pm->power, 0);
        return 0;