[PATCH 10/13] PM: earlysuspend: Add console switch when user requested sleep state changes.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Arve Hjønnevåg <arve@xxxxxxxxxxx>--- kernel/power/Kconfig               |   17 ++++++++ kernel/power/Makefile              |    1 + kernel/power/consoleearlysuspend.c |   78 ++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 0 deletions(-) create mode 100644 kernel/power/consoleearlysuspend.c
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfigindex aedea7e..f1a3d5c 100644--- a/kernel/power/Kconfig+++ b/kernel/power/Kconfig@@ -166,6 +166,23 @@ config EARLYSUSPEND 	  Call early suspend handlers when the user requested sleep state 	  changes. +choice+	prompt "User-space screen access"+	default CONSOLE_EARLYSUSPEND+	depends on HAS_EARLYSUSPEND++	config NO_USER_SPACE_SCREEN_ACCESS_CONTROL+		bool "None"++	config CONSOLE_EARLYSUSPEND+		bool "Console switch on early-suspend"+		depends on HAS_EARLYSUSPEND && VT+		---help---+		  Register early suspend handler to perform a console switch to+		  when user-space should stop drawing to the screen and a switch+		  back when it should resume.+endchoice+ config HIBERNATION 	bool "Hibernation (aka 'suspend to disk')" 	depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLEdiff --git a/kernel/power/Makefile b/kernel/power/Makefileindex d3467b3..8bf293d 100644--- a/kernel/power/Makefile+++ b/kernel/power/Makefile@@ -9,6 +9,7 @@ obj-$(CONFIG_FREEZER)		+= process.o obj-$(CONFIG_WAKELOCK)		+= wakelock.o obj-$(CONFIG_USER_WAKELOCK)	+= userwakelock.o obj-$(CONFIG_EARLYSUSPEND)	+= earlysuspend.o+obj-$(CONFIG_CONSOLE_EARLYSUSPEND)	+= consoleearlysuspend.o obj-$(CONFIG_HIBERNATION)	+= swsusp.o disk.o snapshot.o swap.o user.o  obj-$(CONFIG_MAGIC_SYSRQ)	+= poweroff.odiff --git a/kernel/power/consoleearlysuspend.c b/kernel/power/consoleearlysuspend.cnew file mode 100644index 0000000..a8befb4--- /dev/null+++ b/kernel/power/consoleearlysuspend.c@@ -0,0 +1,78 @@+/* kernel/power/consoleearlysuspend.c+ *+ * Copyright (C) 2005-2008 Google, Inc.+ *+ * This software is licensed under the terms of the GNU General Public+ * License version 2, as published by the Free Software Foundation, and+ * may be copied, distributed, and modified under those terms.+ *+ * This program is distributed in the hope that it will be useful,+ * but WITHOUT ANY WARRANTY; without even the implied warranty of+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+ * GNU General Public License for more details.+ *+ */++#include <linux/console.h>+#include <linux/earlysuspend.h>+#include <linux/kbd_kern.h>+#include <linux/module.h>+#include <linux/vt_kern.h>+#include <linux/wait.h>++#define EARLY_SUSPEND_CONSOLE	(MAX_NR_CONSOLES-1)++static int orig_fgconsole;+static void console_early_suspend(struct early_suspend *h)+{+	acquire_console_sem();+	orig_fgconsole = fg_console;+	if (vc_allocate(EARLY_SUSPEND_CONSOLE))+		goto err;+	if (set_console(EARLY_SUSPEND_CONSOLE))+		goto err;+	release_console_sem();++	if (vt_waitactive(EARLY_SUSPEND_CONSOLE))+		pr_warning("console_early_suspend: Can't switch VCs.\n");+	return;+err:+	pr_warning("console_early_suspend: Can't set console\n");+	release_console_sem();+}++static void console_late_resume(struct early_suspend *h)+{+	int ret;+	acquire_console_sem();+	ret = set_console(orig_fgconsole);+	release_console_sem();+	if (ret) {+		pr_warning("console_late_resume: Can't set console.\n");+		return;+	}++	if (vt_waitactive(orig_fgconsole))+		pr_warning("console_late_resume: Can't switch VCs.\n");+}++static struct early_suspend console_early_suspend_desc = {+	.level = EARLY_SUSPEND_LEVEL_STOP_DRAWING,+	.suspend = console_early_suspend,+	.resume = console_late_resume,+};++static int __init console_early_suspend_init(void)+{+	register_early_suspend(&console_early_suspend_desc);+	return 0;+}++static void  __exit console_early_suspend_exit(void)+{+	unregister_early_suspend(&console_early_suspend_desc);+}++module_init(console_early_suspend_init);+module_exit(console_early_suspend_exit);+-- 1.6.1
_______________________________________________linux-pm mailing listlinux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx://lists.linux-foundation.org/mailman/listinfo/linux-pm


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux