]> err.no Git - linux-2.6/blobdiff - kernel/power/main.c
Add support for suspending and resuming the whole console subsystem
[linux-2.6] / kernel / power / main.c
index d253f3ae2fa5743d9c003c38468f1c4c823193e0..0a907f0dc56b3bc0f67e189ded38f64e8ad94ebb 100644 (file)
@@ -86,6 +86,7 @@ static int suspend_prepare(suspend_state_t state)
                        goto Thaw;
        }
 
+       suspend_console();
        if ((error = device_suspend(PMSG_SUSPEND))) {
                printk(KERN_ERR "Some devices failed to suspend\n");
                goto Finish;
@@ -103,7 +104,7 @@ static int suspend_prepare(suspend_state_t state)
 }
 
 
-static int suspend_enter(suspend_state_t state)
+int suspend_enter(suspend_state_t state)
 {
        int error = 0;
        unsigned long flags;
@@ -133,10 +134,11 @@ static int suspend_enter(suspend_state_t state)
 static void suspend_finish(suspend_state_t state)
 {
        device_resume();
-       if (pm_ops && pm_ops->finish)
-               pm_ops->finish(state);
+       resume_console();
        thaw_processes();
        enable_nonboot_cpus();
+       if (pm_ops && pm_ops->finish)
+               pm_ops->finish(state);
        pm_restore_console();
 }
 
@@ -272,7 +274,7 @@ static ssize_t state_store(struct subsystem * subsys, const char * buf, size_t n
                if (*s && !strncmp(buf, *s, len))
                        break;
        }
-       if (*s)
+       if (state < PM_SUSPEND_MAX && *s)
                error = enter_state(state);
        else
                error = -EINVAL;