diff options
-rw-r--r-- | drivers/acpi/sleep/proc.c | 2 | ||||
-rw-r--r-- | drivers/i2c/chips/tps65010.c | 4 | ||||
-rw-r--r-- | include/linux/init.h | 2 | ||||
-rw-r--r-- | include/linux/suspend.h | 8 | ||||
-rw-r--r-- | kernel/power/main.c | 21 | ||||
-rw-r--r-- | kernel/sys.c | 2 |
6 files changed, 13 insertions, 26 deletions
diff --git a/drivers/acpi/sleep/proc.c b/drivers/acpi/sleep/proc.c index 2d912b71e543..dcde9ddd105a 100644 --- a/drivers/acpi/sleep/proc.c +++ b/drivers/acpi/sleep/proc.c | |||
@@ -60,7 +60,7 @@ acpi_system_write_sleep(struct file *file, | |||
60 | state = simple_strtoul(str, NULL, 0); | 60 | state = simple_strtoul(str, NULL, 0); |
61 | #ifdef CONFIG_SOFTWARE_SUSPEND | 61 | #ifdef CONFIG_SOFTWARE_SUSPEND |
62 | if (state == 4) { | 62 | if (state == 4) { |
63 | error = software_suspend(); | 63 | error = pm_suspend(PM_SUSPEND_DISK); |
64 | goto Done; | 64 | goto Done; |
65 | } | 65 | } |
66 | #endif | 66 | #endif |
diff --git a/drivers/i2c/chips/tps65010.c b/drivers/i2c/chips/tps65010.c index 214fbb1423c5..7ed92dc3d833 100644 --- a/drivers/i2c/chips/tps65010.c +++ b/drivers/i2c/chips/tps65010.c | |||
@@ -351,8 +351,10 @@ static void tps65010_interrupt(struct tps65010 *tps) | |||
351 | #if 0 | 351 | #if 0 |
352 | /* REVISIT: this might need its own workqueue | 352 | /* REVISIT: this might need its own workqueue |
353 | * plus tweaks including deadlock avoidance ... | 353 | * plus tweaks including deadlock avoidance ... |
354 | * also needs to get error handling and probably | ||
355 | * an #ifdef CONFIG_SOFTWARE_SUSPEND | ||
354 | */ | 356 | */ |
355 | software_suspend(); | 357 | pm_suspend(PM_SUSPEND_DISK); |
356 | #endif | 358 | #endif |
357 | poll = 1; | 359 | poll = 1; |
358 | } | 360 | } |
diff --git a/include/linux/init.h b/include/linux/init.h index 9abf120ec9f8..dbbdbd1bec77 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -233,7 +233,7 @@ void __init parse_early_param(void); | |||
233 | #define __obsolete_setup(str) /* nothing */ | 233 | #define __obsolete_setup(str) /* nothing */ |
234 | #endif | 234 | #endif |
235 | 235 | ||
236 | /* Data marked not to be saved by software_suspend() */ | 236 | /* Data marked not to be saved by software suspend */ |
237 | #define __nosavedata __attribute__ ((__section__ (".data.nosave"))) | 237 | #define __nosavedata __attribute__ ((__section__ (".data.nosave"))) |
238 | 238 | ||
239 | /* This means "can be init if no module support, otherwise module load | 239 | /* This means "can be init if no module support, otherwise module load |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 3cc4d6394c07..3aecc96acc76 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -33,8 +33,6 @@ static inline void pm_restore_console(void) {} | |||
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | #if defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND) | 35 | #if defined(CONFIG_PM) && defined(CONFIG_SOFTWARE_SUSPEND) |
36 | /* kernel/power/swsusp.c */ | ||
37 | extern int software_suspend(void); | ||
38 | /* kernel/power/snapshot.c */ | 36 | /* kernel/power/snapshot.c */ |
39 | extern void __init register_nosave_region(unsigned long, unsigned long); | 37 | extern void __init register_nosave_region(unsigned long, unsigned long); |
40 | extern int swsusp_page_is_forbidden(struct page *); | 38 | extern int swsusp_page_is_forbidden(struct page *); |
@@ -42,12 +40,6 @@ extern void swsusp_set_page_free(struct page *); | |||
42 | extern void swsusp_unset_page_free(struct page *); | 40 | extern void swsusp_unset_page_free(struct page *); |
43 | extern unsigned long get_safe_page(gfp_t gfp_mask); | 41 | extern unsigned long get_safe_page(gfp_t gfp_mask); |
44 | #else | 42 | #else |
45 | static inline int software_suspend(void) | ||
46 | { | ||
47 | printk("Warning: fake suspend called\n"); | ||
48 | return -ENOSYS; | ||
49 | } | ||
50 | |||
51 | static inline void register_nosave_region(unsigned long b, unsigned long e) {} | 43 | static inline void register_nosave_region(unsigned long b, unsigned long e) {} |
52 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } | 44 | static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } |
53 | static inline void swsusp_set_page_free(struct page *p) {} | 45 | static inline void swsusp_set_page_free(struct page *p) {} |
diff --git a/kernel/power/main.c b/kernel/power/main.c index 5a779270cdbc..f6dda685e7e2 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
@@ -184,17 +184,21 @@ static void suspend_finish(suspend_state_t state) | |||
184 | static const char * const pm_states[PM_SUSPEND_MAX] = { | 184 | static const char * const pm_states[PM_SUSPEND_MAX] = { |
185 | [PM_SUSPEND_STANDBY] = "standby", | 185 | [PM_SUSPEND_STANDBY] = "standby", |
186 | [PM_SUSPEND_MEM] = "mem", | 186 | [PM_SUSPEND_MEM] = "mem", |
187 | #ifdef CONFIG_SOFTWARE_SUSPEND | ||
188 | [PM_SUSPEND_DISK] = "disk", | 187 | [PM_SUSPEND_DISK] = "disk", |
189 | #endif | ||
190 | }; | 188 | }; |
191 | 189 | ||
192 | static inline int valid_state(suspend_state_t state) | 190 | static inline int valid_state(suspend_state_t state) |
193 | { | 191 | { |
194 | /* Suspend-to-disk does not really need low-level support. | 192 | /* Suspend-to-disk does not really need low-level support. |
195 | * It can work with reboot if needed. */ | 193 | * It can work with shutdown/reboot if needed. If it isn't |
194 | * configured, then it cannot be supported. | ||
195 | */ | ||
196 | if (state == PM_SUSPEND_DISK) | 196 | if (state == PM_SUSPEND_DISK) |
197 | #ifdef CONFIG_SOFTWARE_SUSPEND | ||
197 | return 1; | 198 | return 1; |
199 | #else | ||
200 | return 0; | ||
201 | #endif | ||
198 | 202 | ||
199 | /* all other states need lowlevel support and need to be | 203 | /* all other states need lowlevel support and need to be |
200 | * valid to the lowlevel implementation, no valid callback | 204 | * valid to the lowlevel implementation, no valid callback |
@@ -244,17 +248,6 @@ static int enter_state(suspend_state_t state) | |||
244 | return error; | 248 | return error; |
245 | } | 249 | } |
246 | 250 | ||
247 | #ifdef CONFIG_SOFTWARE_SUSPEND | ||
248 | /* | ||
249 | * This is main interface to the outside world. It needs to be | ||
250 | * called from process context. | ||
251 | */ | ||
252 | int software_suspend(void) | ||
253 | { | ||
254 | return enter_state(PM_SUSPEND_DISK); | ||
255 | } | ||
256 | #endif | ||
257 | |||
258 | 251 | ||
259 | /** | 252 | /** |
260 | * pm_suspend - Externally visible function for suspending system. | 253 | * pm_suspend - Externally visible function for suspending system. |
diff --git a/kernel/sys.c b/kernel/sys.c index 123b165080e6..fe1f3ab20477 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -881,7 +881,7 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user | |||
881 | #ifdef CONFIG_SOFTWARE_SUSPEND | 881 | #ifdef CONFIG_SOFTWARE_SUSPEND |
882 | case LINUX_REBOOT_CMD_SW_SUSPEND: | 882 | case LINUX_REBOOT_CMD_SW_SUSPEND: |
883 | { | 883 | { |
884 | int ret = software_suspend(); | 884 | int ret = pm_suspend(PM_SUSPEND_DISK); |
885 | unlock_kernel(); | 885 | unlock_kernel(); |
886 | return ret; | 886 | return ret; |
887 | } | 887 | } |