aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/sleep/proc.c2
-rw-r--r--drivers/i2c/chips/tps65010.c4
-rw-r--r--include/linux/init.h2
-rw-r--r--include/linux/suspend.h8
-rw-r--r--kernel/power/main.c21
-rw-r--r--kernel/sys.c2
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 */
37extern int software_suspend(void);
38/* kernel/power/snapshot.c */ 36/* kernel/power/snapshot.c */
39extern void __init register_nosave_region(unsigned long, unsigned long); 37extern void __init register_nosave_region(unsigned long, unsigned long);
40extern int swsusp_page_is_forbidden(struct page *); 38extern int swsusp_page_is_forbidden(struct page *);
@@ -42,12 +40,6 @@ extern void swsusp_set_page_free(struct page *);
42extern void swsusp_unset_page_free(struct page *); 40extern void swsusp_unset_page_free(struct page *);
43extern unsigned long get_safe_page(gfp_t gfp_mask); 41extern unsigned long get_safe_page(gfp_t gfp_mask);
44#else 42#else
45static inline int software_suspend(void)
46{
47 printk("Warning: fake suspend called\n");
48 return -ENOSYS;
49}
50
51static inline void register_nosave_region(unsigned long b, unsigned long e) {} 43static inline void register_nosave_region(unsigned long b, unsigned long e) {}
52static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } 44static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
53static inline void swsusp_set_page_free(struct page *p) {} 45static 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)
184static const char * const pm_states[PM_SUSPEND_MAX] = { 184static 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
192static inline int valid_state(suspend_state_t state) 190static 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 */
252int 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 }