aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-pxa/pm.c26
-rw-r--r--arch/arm/mach-pxa/pxa25x.c20
-rw-r--r--arch/arm/mach-pxa/pxa27x.c17
3 files changed, 34 insertions, 29 deletions
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c
index 6d86203aef7b..d439ffa1b071 100644
--- a/arch/arm/mach-pxa/pm.c
+++ b/arch/arm/mach-pxa/pm.c
@@ -200,29 +200,3 @@ unsigned long sleep_phys_sp(void *sp)
200{ 200{
201 return virt_to_phys(sp); 201 return virt_to_phys(sp);
202} 202}
203
204/*
205 * Called after processes are frozen, but before we shut down devices.
206 */
207int pxa_pm_prepare(suspend_state_t state)
208{
209 extern int pxa_cpu_pm_prepare(suspend_state_t state);
210
211 return pxa_cpu_pm_prepare(state);
212}
213
214EXPORT_SYMBOL_GPL(pxa_pm_prepare);
215
216static struct pm_ops pxa_pm_ops = {
217 .prepare = pxa_pm_prepare,
218 .enter = pxa_pm_enter,
219 .valid = pm_valid_only_mem,
220};
221
222static int __init pxa_pm_init(void)
223{
224 pm_set_ops(&pxa_pm_ops);
225 return 0;
226}
227
228device_initcall(pxa_pm_init);
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
index c1f21739bf71..8560439ba0b9 100644
--- a/arch/arm/mach-pxa/pxa25x.c
+++ b/arch/arm/mach-pxa/pxa25x.c
@@ -23,6 +23,7 @@
23 23
24#include <asm/hardware.h> 24#include <asm/hardware.h>
25#include <asm/arch/pxa-regs.h> 25#include <asm/arch/pxa-regs.h>
26#include <asm/arch/pm.h>
26 27
27#include "generic.h" 28#include "generic.h"
28 29
@@ -105,7 +106,7 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
105 106
106#ifdef CONFIG_PM 107#ifdef CONFIG_PM
107 108
108int pxa_cpu_pm_prepare(suspend_state_t state) 109int pxa_pm_prepare(suspend_state_t state)
109{ 110{
110 switch (state) { 111 switch (state) {
111 case PM_SUSPEND_MEM: 112 case PM_SUSPEND_MEM:
@@ -133,4 +134,21 @@ void pxa_cpu_pm_enter(suspend_state_t state)
133 } 134 }
134} 135}
135 136
137static struct pm_ops pxa25x_pm_ops = {
138 .prepare = pxa_pm_prepare,
139 .enter = pxa_pm_enter,
140 .valid = pm_valid_only_mem,
141};
136#endif 142#endif
143
144static int __init pxa25x_init(void)
145{
146 if (cpu_is_pxa21x() || cpu_is_pxa25x()) {
147#ifdef CONFIG_PM
148 pm_set_ops(&pxa25x_pm_ops);
149#endif
150 }
151 return 0;
152}
153
154subsys_initcall(pxa25x_init);
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index 1939acc3f9f7..be6ca7d3afa2 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -21,6 +21,7 @@
21#include <asm/irq.h> 21#include <asm/irq.h>
22#include <asm/arch/pxa-regs.h> 22#include <asm/arch/pxa-regs.h>
23#include <asm/arch/ohci.h> 23#include <asm/arch/ohci.h>
24#include <asm/arch/pm.h>
24 25
25#include "generic.h" 26#include "generic.h"
26 27
@@ -122,7 +123,7 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
122 123
123#ifdef CONFIG_PM 124#ifdef CONFIG_PM
124 125
125int pxa_cpu_pm_prepare(suspend_state_t state) 126int pxa_pm_prepare(suspend_state_t state)
126{ 127{
127 switch (state) { 128 switch (state) {
128 case PM_SUSPEND_MEM: 129 case PM_SUSPEND_MEM:
@@ -162,6 +163,11 @@ void pxa_cpu_pm_enter(suspend_state_t state)
162 } 163 }
163} 164}
164 165
166static struct pm_ops pxa27x_pm_ops = {
167 .prepare = pxa_pm_prepare,
168 .enter = pxa_pm_enter,
169 .valid = pm_valid_only_mem,
170};
165#endif 171#endif
166 172
167/* 173/*
@@ -205,7 +211,14 @@ static struct platform_device *devices[] __initdata = {
205 211
206static int __init pxa27x_init(void) 212static int __init pxa27x_init(void)
207{ 213{
208 return platform_add_devices(devices, ARRAY_SIZE(devices)); 214 int ret = 0;
215 if (cpu_is_pxa27x()) {
216#ifdef CONFIG_PM
217 pm_set_ops(&pxa27x_pm_ops);
218#endif
219 ret = platform_add_devices(devices, ARRAY_SIZE(devices));
220 }
221 return ret;
209} 222}
210 223
211subsys_initcall(pxa27x_init); 224subsys_initcall(pxa27x_init);