]>
Commit | Line | Data |
---|---|---|
f42ae0e9 EB |
1 | /* |
2 | * i.MX27 Power Management Routines | |
3 | * | |
4 | * Based on Freescale's BSP | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU General Public License. | |
8 | */ | |
9 | ||
10 | #include <linux/kernel.h> | |
11 | #include <linux/suspend.h> | |
12 | #include <linux/io.h> | |
50f2de61 SG |
13 | |
14 | #include "hardware.h" | |
f42ae0e9 EB |
15 | |
16 | static int mx27_suspend_enter(suspend_state_t state) | |
17 | { | |
18 | u32 cscr; | |
19 | switch (state) { | |
20 | case PM_SUSPEND_MEM: | |
21 | /* Clear MPEN and SPEN to disable MPLL/SPLL */ | |
22 | cscr = __raw_readl(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); | |
23 | cscr &= 0xFFFFFFFC; | |
24 | __raw_writel(cscr, MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); | |
25 | /* Executes WFI */ | |
4a3ea244 | 26 | cpu_do_idle(); |
f42ae0e9 EB |
27 | break; |
28 | ||
29 | default: | |
30 | return -EINVAL; | |
31 | } | |
32 | return 0; | |
33 | } | |
34 | ||
2f55ac07 | 35 | static const struct platform_suspend_ops mx27_suspend_ops = { |
f42ae0e9 EB |
36 | .enter = mx27_suspend_enter, |
37 | .valid = suspend_valid_only_mem, | |
38 | }; | |
39 | ||
40 | static int __init mx27_pm_init(void) | |
41 | { | |
76586d35 SH |
42 | if (!cpu_is_mx27()) |
43 | return 0; | |
44 | ||
f42ae0e9 EB |
45 | suspend_set_ops(&mx27_suspend_ops); |
46 | return 0; | |
47 | } | |
48 | ||
49 | device_initcall(mx27_pm_init); |