Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pm-imx27.c
Go to the documentation of this file.
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 #include <mach/hardware.h>
14 
15 static int mx27_suspend_enter(suspend_state_t state)
16 {
17  u32 cscr;
18  switch (state) {
19  case PM_SUSPEND_MEM:
20  /* Clear MPEN and SPEN to disable MPLL/SPLL */
22  cscr &= 0xFFFFFFFC;
24  /* Executes WFI */
25  cpu_do_idle();
26  break;
27 
28  default:
29  return -EINVAL;
30  }
31  return 0;
32 }
33 
34 static const struct platform_suspend_ops mx27_suspend_ops = {
35  .enter = mx27_suspend_enter,
36  .valid = suspend_valid_only_mem,
37 };
38 
39 static int __init mx27_pm_init(void)
40 {
41  if (!cpu_is_mx27())
42  return 0;
43 
44  suspend_set_ops(&mx27_suspend_ops);
45  return 0;
46 }
47 
48 device_initcall(mx27_pm_init);