Merge tag 'fscache-fixes-20141013' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / arm / mach-shmobile / pm-r8a7740.c
1 /*
2  * r8a7740 power management support
3  *
4  * Copyright (C) 2012  Renesas Solutions Corp.
5  * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6  *
7  * This file is subject to the terms and conditions of the GNU General Public
8  * License.  See the file "COPYING" in the main directory of this archive
9  * for more details.
10  */
11 #include <linux/console.h>
12 #include <linux/suspend.h>
13 #include "common.h"
14 #include "pm-rmobile.h"
15
16 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
17 static int r8a7740_pd_a4s_suspend(void)
18 {
19         /*
20          * The A4S domain contains the CPU core and therefore it should
21          * only be turned off if the CPU is not in use.
22          */
23         return -EBUSY;
24 }
25
26 static int r8a7740_pd_a3sp_suspend(void)
27 {
28         /*
29          * Serial consoles make use of SCIF hardware located in A3SP,
30          * keep such power domain on if "no_console_suspend" is set.
31          */
32         return console_suspend_enabled ? 0 : -EBUSY;
33 }
34
35 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
36         {
37                 .genpd.name     = "A4LC",
38                 .bit_shift      = 1,
39         }, {
40                 .genpd.name     = "A4S",
41                 .bit_shift      = 10,
42                 .gov            = &pm_domain_always_on_gov,
43                 .no_debug       = true,
44                 .suspend        = r8a7740_pd_a4s_suspend,
45         }, {
46                 .genpd.name     = "A3SP",
47                 .bit_shift      = 11,
48                 .gov            = &pm_domain_always_on_gov,
49                 .no_debug       = true,
50                 .suspend        = r8a7740_pd_a3sp_suspend,
51         },
52 };
53
54 void __init r8a7740_init_pm_domains(void)
55 {
56         rmobile_init_domains(r8a7740_pm_domains, ARRAY_SIZE(r8a7740_pm_domains));
57         pm_genpd_add_subdomain_names("A4S", "A3SP");
58 }
59 #endif /* CONFIG_PM && !CONFIG_ARCH_MULTIPLATFORM */
60
61 #ifdef CONFIG_SUSPEND
62 static int r8a7740_enter_suspend(suspend_state_t suspend_state)
63 {
64         cpu_do_idle();
65         return 0;
66 }
67
68 static void r8a7740_suspend_init(void)
69 {
70         shmobile_suspend_ops.enter = r8a7740_enter_suspend;
71 }
72 #else
73 static void r8a7740_suspend_init(void) {}
74 #endif
75
76 void __init r8a7740_pm_init(void)
77 {
78         r8a7740_suspend_init();
79 }