diff options
author | Pramod Gurav <pramod.gurav@smartplayin.com> | 2014-09-25 07:33:51 -0400 |
---|---|---|
committer | Sebastian Reichel <sre@kernel.org> | 2014-09-26 13:54:33 -0400 |
commit | 18a702e0de9879d5c0225a09f494443f0b91a0cc (patch) | |
tree | 5b7ad26d477002d20f79caaf7314c775b833e5f2 | |
parent | 371bb20d6927f204ef5a7887ecddb06b2501c0d9 (diff) |
power: reset: use restart_notifier mechanism for msm-poweroff
This change replaces use of arm_pm_restart with recently introduced
reset mechanism in Linux kernel called restart_notifier.
Choosing priority 128, which is default priority, as according to
documentation, this mechanism is sufficient to restart the entire system.
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Josh Cartwright <joshc@codeaurora.org>
Cc: Sebastian Reichel <sre@kernel.org>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: linux-pm@vger.kernel.org
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Pramod Gurav <pramod.gurav@smartplayin.com>
Signed-off-by: Sebastian Reichel <sre@kernel.org>
-rw-r--r-- | drivers/power/reset/msm-poweroff.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/power/reset/msm-poweroff.c b/drivers/power/reset/msm-poweroff.c index 774f9a3b310d..4702efdfe466 100644 --- a/drivers/power/reset/msm-poweroff.c +++ b/drivers/power/reset/msm-poweroff.c | |||
@@ -20,21 +20,27 @@ | |||
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | #include <linux/reboot.h> | 22 | #include <linux/reboot.h> |
23 | 23 | #include <linux/pm.h> | |
24 | #include <asm/system_misc.h> | ||
25 | 24 | ||
26 | static void __iomem *msm_ps_hold; | 25 | static void __iomem *msm_ps_hold; |
27 | 26 | static int do_msm_restart(struct notifier_block *nb, unsigned long action, | |
28 | static void do_msm_restart(enum reboot_mode reboot_mode, const char *cmd) | 27 | void *data) |
29 | { | 28 | { |
30 | writel(0, msm_ps_hold); | 29 | writel(0, msm_ps_hold); |
31 | mdelay(10000); | 30 | mdelay(10000); |
31 | |||
32 | return NOTIFY_DONE; | ||
32 | } | 33 | } |
33 | 34 | ||
35 | static struct notifier_block restart_nb = { | ||
36 | .notifier_call = do_msm_restart, | ||
37 | .priority = 128, | ||
38 | }; | ||
39 | |||
34 | static void do_msm_poweroff(void) | 40 | static void do_msm_poweroff(void) |
35 | { | 41 | { |
36 | /* TODO: Add poweroff capability */ | 42 | /* TODO: Add poweroff capability */ |
37 | do_msm_restart(REBOOT_HARD, NULL); | 43 | do_msm_restart(&restart_nb, 0, NULL); |
38 | } | 44 | } |
39 | 45 | ||
40 | static int msm_restart_probe(struct platform_device *pdev) | 46 | static int msm_restart_probe(struct platform_device *pdev) |
@@ -47,8 +53,10 @@ static int msm_restart_probe(struct platform_device *pdev) | |||
47 | if (IS_ERR(msm_ps_hold)) | 53 | if (IS_ERR(msm_ps_hold)) |
48 | return PTR_ERR(msm_ps_hold); | 54 | return PTR_ERR(msm_ps_hold); |
49 | 55 | ||
56 | register_restart_handler(&restart_nb); | ||
57 | |||
50 | pm_power_off = do_msm_poweroff; | 58 | pm_power_off = do_msm_poweroff; |
51 | arm_pm_restart = do_msm_restart; | 59 | |
52 | return 0; | 60 | return 0; |
53 | } | 61 | } |
54 | 62 | ||