|
发表于 2014-7-21 19:20:13
|
显示全部楼层
1. 原因:
这个power是进入休眠状态而不是关机.
不能开机的真正原因是:
内核中的sun7i-ir.c中对休眠进行了处理,把红外的时钟关闭了.
即在休眠状态下,红外不接收任何信号,所以也就不能唤醒了.
2. 解决方法:
把sun-7i-ir.c修改成如下形式: 即将suspend的处理的两个函数,改为空.
- #if 0 //add by cong start
- //停用设备
- #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);
- */
- dbmsg("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)
- {
- dbmsg("EARLYSUSPEND:enter laterresume: sun7i_ir_resume. \n");
- ir_code = 0;
- timer_used = 0;
- ir_reset_rawbuffer();
- ir_clk_cfg();
- ir_reg_cfg();
- }
- #endif
- #endif //add by cong end
- static void sun7i_ir_suspend(struct early_suspend *h)
- {
- }
- //重新唤醒
- static void sun7i_ir_resume(struct early_suspend *h)
- {
- }
复制代码
|
评分
-
查看全部评分
|