From: 黄涛 Date: Sat, 30 Jul 2011 14:58:02 +0000 (+0800) Subject: Revert "PM: earlysuspend: Removing dependence on console." X-Git-Tag: firefly_0821_release~9868 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fe20390050547a7206c684169211b139b1e59be8;p=firefly-linux-kernel-4.4.55.git Revert "PM: earlysuspend: Removing dependence on console." This reverts commit cc2ae286f899544417e94e1f10004ffa3ab327fa. --- diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 1621b707647e..3b3910f11825 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -162,7 +162,6 @@ config EARLYSUSPEND choice prompt "User-space screen access" - default FB_EARLYSUSPEND if !FRAMEBUFFER_CONSOLE default CONSOLE_EARLYSUSPEND depends on HAS_EARLYSUSPEND @@ -176,14 +175,6 @@ choice 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. - - config FB_EARLYSUSPEND - bool "Sysfs interface" - depends on HAS_EARLYSUSPEND - ---help--- - Register early suspend handler that notifies and waits for - user-space through sysfs when user-space should stop drawing - to the screen and notifies user-space when it should resume. endchoice config HIBERNATION diff --git a/kernel/power/Makefile b/kernel/power/Makefile index 3231c48a5796..9f946b668d67 100644 --- a/kernel/power/Makefile +++ b/kernel/power/Makefile @@ -14,6 +14,5 @@ obj-$(CONFIG_WAKELOCK) += wakelock.o obj-$(CONFIG_USER_WAKELOCK) += userwakelock.o obj-$(CONFIG_EARLYSUSPEND) += earlysuspend.o obj-$(CONFIG_CONSOLE_EARLYSUSPEND) += consoleearlysuspend.o -obj-$(CONFIG_FB_EARLYSUSPEND) += fbearlysuspend.o obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o diff --git a/kernel/power/fbearlysuspend.c b/kernel/power/fbearlysuspend.c deleted file mode 100644 index 15137650149c..000000000000 --- a/kernel/power/fbearlysuspend.c +++ /dev/null @@ -1,153 +0,0 @@ -/* kernel/power/fbearlysuspend.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 -#include -#include - -#include "power.h" - -static wait_queue_head_t fb_state_wq; -static DEFINE_SPINLOCK(fb_state_lock); -static enum { - FB_STATE_STOPPED_DRAWING, - FB_STATE_REQUEST_STOP_DRAWING, - FB_STATE_DRAWING_OK, -} fb_state; - -/* tell userspace to stop drawing, wait for it to stop */ -static void stop_drawing_early_suspend(struct early_suspend *h) -{ - int ret; - unsigned long irq_flags; - - spin_lock_irqsave(&fb_state_lock, irq_flags); - fb_state = FB_STATE_REQUEST_STOP_DRAWING; - spin_unlock_irqrestore(&fb_state_lock, irq_flags); - - wake_up_all(&fb_state_wq); - ret = wait_event_timeout(fb_state_wq, - fb_state == FB_STATE_STOPPED_DRAWING, - HZ); - if (unlikely(fb_state != FB_STATE_STOPPED_DRAWING)) - pr_warning("stop_drawing_early_suspend: timeout waiting for " - "userspace to stop drawing\n"); -} - -/* tell userspace to start drawing */ -static void start_drawing_late_resume(struct early_suspend *h) -{ - unsigned long irq_flags; - - spin_lock_irqsave(&fb_state_lock, irq_flags); - fb_state = FB_STATE_DRAWING_OK; - spin_unlock_irqrestore(&fb_state_lock, irq_flags); - wake_up(&fb_state_wq); -} - -static struct early_suspend stop_drawing_early_suspend_desc = { - .level = EARLY_SUSPEND_LEVEL_STOP_DRAWING, - .suspend = stop_drawing_early_suspend, - .resume = start_drawing_late_resume, -}; - -static ssize_t wait_for_fb_sleep_show(struct kobject *kobj, - struct kobj_attribute *attr, char *buf) -{ - char *s = buf; - int ret; - - ret = wait_event_interruptible(fb_state_wq, - fb_state != FB_STATE_DRAWING_OK); - if (ret && fb_state == FB_STATE_DRAWING_OK) - return ret; - else - s += sprintf(buf, "sleeping"); - return s - buf; -} - -static ssize_t wait_for_fb_wake_show(struct kobject *kobj, - struct kobj_attribute *attr, char *buf) -{ - char *s = buf; - int ret; - unsigned long irq_flags; - - spin_lock_irqsave(&fb_state_lock, irq_flags); - if (fb_state == FB_STATE_REQUEST_STOP_DRAWING) { - fb_state = FB_STATE_STOPPED_DRAWING; - wake_up(&fb_state_wq); - } - spin_unlock_irqrestore(&fb_state_lock, irq_flags); - - ret = wait_event_interruptible(fb_state_wq, - fb_state == FB_STATE_DRAWING_OK); - if (ret && fb_state != FB_STATE_DRAWING_OK) - return ret; - else - s += sprintf(buf, "awake"); - - return s - buf; -} - -#define power_ro_attr(_name) \ -static struct kobj_attribute _name##_attr = { \ - .attr = { \ - .name = __stringify(_name), \ - .mode = 0444, \ - }, \ - .show = _name##_show, \ - .store = NULL, \ -} - -power_ro_attr(wait_for_fb_sleep); -power_ro_attr(wait_for_fb_wake); - -static struct attribute *g[] = { - &wait_for_fb_sleep_attr.attr, - &wait_for_fb_wake_attr.attr, - NULL, -}; - -static struct attribute_group attr_group = { - .attrs = g, -}; - -static int __init android_power_init(void) -{ - int ret; - - init_waitqueue_head(&fb_state_wq); - fb_state = FB_STATE_DRAWING_OK; - - ret = sysfs_create_group(power_kobj, &attr_group); - if (ret) { - pr_err("android_power_init: sysfs_create_group failed\n"); - return ret; - } - - register_early_suspend(&stop_drawing_early_suspend_desc); - return 0; -} - -static void __exit android_power_exit(void) -{ - unregister_early_suspend(&stop_drawing_early_suspend_desc); - sysfs_remove_group(power_kobj, &attr_group); -} - -module_init(android_power_init); -module_exit(android_power_exit); -