diff options
author | Jonghwan Choi <jhbird.choi@samsung.com> | 2011-08-24 08:52:45 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2011-09-16 03:39:05 -0400 |
commit | acd35616c7a30130d3b43ae1c1bb0b7fd121ffb9 (patch) | |
tree | 3ddf2cdd1d64395a8496c6ea9c7dc67a9b701281 /arch/arm/mach-exynos4/clock-exynos4212.c | |
parent | 2bc02c0daae146283ce1b20da6864a27c848812e (diff) |
ARM: EXYNOS4: Add support PM for EXYNOS4212
This patch moves regarding clock stuff of PM into clock
file to support PM on EXYNOS4210 and EXYNOS4212 with one
single kernel image. Because some clock registers are
different on each SoCs.
Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
[kgene.kim@samsung.com: use CONFIG_PM_SLEEP instead of CONFIG_PM]
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-exynos4/clock-exynos4212.c')
-rw-r--r-- | arch/arm/mach-exynos4/clock-exynos4212.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-exynos4/clock-exynos4212.c b/arch/arm/mach-exynos4/clock-exynos4212.c index 5a47a3f0dfe4..77d5decb34fd 100644 --- a/arch/arm/mach-exynos4/clock-exynos4212.c +++ b/arch/arm/mach-exynos4/clock-exynos4212.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
16 | #include <linux/clk.h> | 16 | #include <linux/clk.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <linux/syscore_ops.h> | ||
18 | 19 | ||
19 | #include <plat/cpu-freq.h> | 20 | #include <plat/cpu-freq.h> |
20 | #include <plat/clock.h> | 21 | #include <plat/clock.h> |
@@ -23,12 +24,20 @@ | |||
23 | #include <plat/s5p-clock.h> | 24 | #include <plat/s5p-clock.h> |
24 | #include <plat/clock-clksrc.h> | 25 | #include <plat/clock-clksrc.h> |
25 | #include <plat/exynos4.h> | 26 | #include <plat/exynos4.h> |
27 | #include <plat/pm.h> | ||
26 | 28 | ||
27 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
28 | #include <mach/map.h> | 30 | #include <mach/map.h> |
29 | #include <mach/regs-clock.h> | 31 | #include <mach/regs-clock.h> |
30 | #include <mach/exynos4-clock.h> | 32 | #include <mach/exynos4-clock.h> |
31 | 33 | ||
34 | static struct sleep_save exynos4212_clock_save[] = { | ||
35 | SAVE_ITEM(S5P_CLKSRC_IMAGE), | ||
36 | SAVE_ITEM(S5P_CLKDIV_IMAGE), | ||
37 | SAVE_ITEM(S5P_CLKGATE_IP_IMAGE_4212), | ||
38 | SAVE_ITEM(S5P_CLKGATE_IP_PERIR_4212), | ||
39 | }; | ||
40 | |||
32 | static struct clk *clk_src_mpll_user_list[] = { | 41 | static struct clk *clk_src_mpll_user_list[] = { |
33 | [0] = &clk_fin_mpll, | 42 | [0] = &clk_fin_mpll, |
34 | [1] = &clk_mout_mpll.clk, | 43 | [1] = &clk_mout_mpll.clk, |
@@ -59,6 +68,29 @@ static struct clk init_clocks_off[] = { | |||
59 | /* nothing here yet */ | 68 | /* nothing here yet */ |
60 | }; | 69 | }; |
61 | 70 | ||
71 | #ifdef CONFIG_PM_SLEEP | ||
72 | static int exynos4212_clock_suspend(void) | ||
73 | { | ||
74 | s3c_pm_do_save(exynos4212_clock_save, ARRAY_SIZE(exynos4212_clock_save)); | ||
75 | |||
76 | return 0; | ||
77 | } | ||
78 | |||
79 | static void exynos4212_clock_resume(void) | ||
80 | { | ||
81 | s3c_pm_do_restore_core(exynos4212_clock_save, ARRAY_SIZE(exynos4212_clock_save)); | ||
82 | } | ||
83 | |||
84 | #else | ||
85 | #define exynos4212_clock_suspend NULL | ||
86 | #define exynos4212_clock_resume NULL | ||
87 | #endif | ||
88 | |||
89 | struct syscore_ops exynos4212_clock_syscore_ops = { | ||
90 | .suspend = exynos4212_clock_suspend, | ||
91 | .resume = exynos4212_clock_resume, | ||
92 | }; | ||
93 | |||
62 | void __init exynos4212_register_clocks(void) | 94 | void __init exynos4212_register_clocks(void) |
63 | { | 95 | { |
64 | int ptr; | 96 | int ptr; |
@@ -81,4 +113,6 @@ void __init exynos4212_register_clocks(void) | |||
81 | 113 | ||
82 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 114 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
83 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 115 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
116 | |||
117 | register_syscore_ops(&exynos4212_clock_syscore_ops); | ||
84 | } | 118 | } |