实现本文的前提是要先实现 红外按键的匹配,我的是基于前几篇的基础上做的:
/usr/Cubie_A20/lichee/linux-3.4/drivers/input/keyboard 下面的sun7i-ir.c文件中做更改:
参考:
( 1. 原因:
这个power是进入休眠状态而不是关机.
不能开机的真正原因是:
内核中的sun7i-ir.c中对休眠进行了处理,把红外的时钟关闭了.
即在休眠状态下,红外不接收任何信号,所以也就不能唤醒了.
2. 解决方法:
把sun-7i-ir.c修改成如下形式: 即将suspend的处理的两个函数,改为空.)
把sun7i-ir.c 中的两个函数
//ͣ???豸
#ifdef CONFIG_HAS_EARLYSUSPEND
static void sun7i_ir_suspend(struct early_suspend *h)
{
/* unsigned long tmp = 0;
int ret;
struct sun7i_ir_data *ts = container_of(h, struct sun7i_ir_data, early_suspend);
tmp = readl(IR_BASE+IR_CTRL_REG);
tmp &= 0xfffffffc;
writel(tmp, IR_BASE+IR_CTRL_REG);
*/
// dprintk(DEBUG_SUSPEND, "EARLYSUSPEND:enter earlysuspend: sun7i_ir_suspend. \n");
// if(NULL == ir_clk || IS_ERR(ir_clk)) {
// printk("ir_clk handle is invalid, just return!\n");
// return;
// } else {
// clk_disable(ir_clk);
// }
//
// if(NULL == apb_ir_clk || IS_ERR(ir_clk)) {
// printk("ir_clk handle is invalid, just return!\n");
// return;
// } else {
// clk_disable(apb_ir_clk);
// }
}
//???»???
static void sun7i_ir_resume(struct early_suspend *h)
{
// dprintk(DEBUG_INIT, "EARLYSUSPEND:enter laterresume: sun7i_ir_resume. \n");
//
// ir_code = 0;
// timer_used = 0;
// ir_reset_rawbuffer();
// ir_clk_cfg();
// ir_reg_cfg();
}
改成 这个样子,函数中的全部注释掉
然后,再更该/usr/Cubie_A20/android/device/softwinner/wing-common下面的 axp20-supplyer.kl
是这一行key 255 POWER WAKE
将Power的值改为255,因为我电源键值对应的是255
保存,变异系统,烧写进板子,启动,就会发现可以实现 电源键关机了,
不过这样实现,短按电源键 只是实现了关闭屏幕,但没有真正给cpu断电,这样子在按电源键就可以实现开机啦
长按能关机, 这样会把cpu断电,红外遥控不能开机