Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / arch / arm / mach-shmobile / pm-r8a7740.c
CommitLineData
8459293c
KM
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 */
802a5639 11#include <linux/console.h>
895d3b53 12#include <linux/suspend.h>
fd44aa5e 13#include "common.h"
6b8b0cb4 14#include "pm-rmobile.h"
8459293c 15
c41215b7 16#if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
8459293c
KM
17static int r8a7740_pd_a4s_suspend(void)
18{
19 /*
20 * The A4S domain contains the CPU core and therefore it should
8237f9e5 21 * only be turned off if the CPU is not in use.
8459293c
KM
22 */
23 return -EBUSY;
24}
25
802a5639
KM
26static 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
7b567407
RW
35static struct rmobile_pm_domain r8a7740_pm_domains[] = {
36 {
75349099
GU
37 .genpd.name = "A4LC",
38 .bit_shift = 1,
39 }, {
7b567407
RW
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,
75349099 45 }, {
7b567407
RW
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 },
802a5639
KM
52};
53
7b567407
RW
54void __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}
c41215b7 59#endif /* CONFIG_PM && !CONFIG_ARCH_MULTIPLATFORM */
895d3b53
BH
60
61#ifdef CONFIG_SUSPEND
62static int r8a7740_enter_suspend(suspend_state_t suspend_state)
63{
64 cpu_do_idle();
65 return 0;
66}
67
68static void r8a7740_suspend_init(void)
69{
70 shmobile_suspend_ops.enter = r8a7740_enter_suspend;
71}
72#else
73static void r8a7740_suspend_init(void) {}
74#endif
75
76void __init r8a7740_pm_init(void)
77{
78 r8a7740_suspend_init();
79}