diff options
author | Colin Cross <ccross@android.com> | 2011-07-22 14:57:09 -0700 |
---|---|---|
committer | Christian Neumüller <cn00@gmx.at> | 2014-12-30 12:53:35 +0100 |
commit | 5d6db4245430a8f6dad6bd6b8aea7635f2accfa6 (patch) | |
tree | fcd3e93dc1d2c8993962a0249f9d1cf010d197d5 | |
parent | 52530c8366da6d957ad6096f862dc3a833e25891 (diff) | |
download | kernel_samsung_smdk4412-5d6db4245430a8f6dad6bd6b8aea7635f2accfa6.zip kernel_samsung_smdk4412-5d6db4245430a8f6dad6bd6b8aea7635f2accfa6.tar.gz kernel_samsung_smdk4412-5d6db4245430a8f6dad6bd6b8aea7635f2accfa6.tar.bz2 |
cpu_pm: call notifiers during suspend
Implements syscore_ops in cpu_pm to call the cpu and
cpu cluster notifiers during suspend and resume,
allowing drivers receiving the notifications to
avoid implementing syscore_ops.
Change-Id: I82b1a1e4464b8250a547f23999151c8a09ca4e22
Signed-off-by: Colin Cross <ccross@android.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Tested-and-Acked-by: Shawn Guo <shawn.guo@linaro.org>
Tested-by: Vishwanath BS <vishwanath.bs@ti.com>
-rw-r--r-- | kernel/cpu_pm.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c index 4d1ff4a..249152e 100644 --- a/kernel/cpu_pm.c +++ b/kernel/cpu_pm.c @@ -20,6 +20,7 @@ #include <linux/module.h> #include <linux/notifier.h> #include <linux/spinlock.h> +#include <linux/syscore_ops.h> static DEFINE_RWLOCK(cpu_pm_notifier_lock); static RAW_NOTIFIER_HEAD(cpu_pm_notifier_chain); @@ -198,3 +199,35 @@ int cpu_cluster_pm_exit(void) return ret; } EXPORT_SYMBOL_GPL(cpu_cluster_pm_exit); + +#ifdef CONFIG_PM +static int cpu_pm_suspend(void) +{ + int ret; + + ret = cpu_pm_enter(); + if (ret) + return ret; + + ret = cpu_cluster_pm_enter(); + return ret; +} + +static void cpu_pm_resume(void) +{ + cpu_cluster_pm_exit(); + cpu_pm_exit(); +} + +static struct syscore_ops cpu_pm_syscore_ops = { + .suspend = cpu_pm_suspend, + .resume = cpu_pm_resume, +}; + +static int cpu_pm_init(void) +{ + register_syscore_ops(&cpu_pm_syscore_ops); + return 0; +} +core_initcall(cpu_pm_init); +#endif |