A20 实现 红外 开关机

       实现本文的前提是要先实现 红外按键的匹配,我的是基于前几篇的基础上做的:      


    /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断电,红外遥控不能开机








你可能感兴趣的:(A20)