找到比较好的对于android内核wakelock的分析:
http://blog.csdn.net/lizhiguo0532/article/details/6453581
http://blog.csdn.net/lizhiguo0532/article/details/6453587
http://blog.csdn.net/lizhiguo0532/article/details/6453595
需要长按power键才能亮屏,短按则是只到一半就又suspend了。
解决办法是在keyboard的resume中上报一个power按键事件。
drivers/input/keyboard/s3c-keypad.c
static int s3c_keypad_resume(struct platform_device *dev)
{
#ifdef CONFIG_ANDROID
#include <mach/regs-clock.h>
#define KEYCODE_UNKNOWN 26 //jeff 10
mask = readl(S5P_WAKEUP_STAT);
//printk("%s: S5P_WAKEUP_STAT = 0x%x\n",__func__,mask);
/* send power key when waked up by keypad or external interrupt */
if (mask & 0x21)
{
input_report_key(idev, KEYCODE_UNKNOWN, 1);
udelay(5);
input_report_key(idev, KEYCODE_UNKNOWN, 0);
}
#endif
}
原本的上报值为10,必须改成和power键上报值26. 然后短按power键就可以切换
suspend/resume模式了。