]>
Commit | Line | Data |
---|---|---|
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> | |
13 | ||
14 | #include "hardware.h" | |
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 = imx_readl(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); | |
23 | cscr &= 0xFFFFFFFC; | |
24 | imx_writel(cscr, MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); | |
25 | /* Executes WFI */ | |
26 | cpu_do_idle(); | |
27 | break; | |
28 | ||
29 | default: | |
30 | return -EINVAL; | |
31 | } | |
32 | return 0; | |
33 | } | |
34 | ||
35 | static const struct platform_suspend_ops mx27_suspend_ops = { | |
36 | .enter = mx27_suspend_enter, | |
37 | .valid = suspend_valid_only_mem, | |
38 | }; | |
39 | ||
40 | void __init imx27_pm_init(void) | |
41 | { | |
42 | suspend_set_ops(&mx27_suspend_ops); | |
43 | } |