阅读:5614回复:1

Amlogic平台suspend后遥控器无法唤醒问题

楼主#
更多 发布于:2019-12-18 20:30
问题现象:
使用遥控器POWER键使盒子进入suspend待机后,无法用遥控器唤醒盒子。

分析:
uboot中power键码值的修改检查:
gxl_p212_v1.h:

#define CONFIG_IR_REMOTE_USE_PROTOCOL 0         // 0:nec  1:duokan  2:Toshiba 3:rca 4:rcmm
#define CONFIG_IR_REMOTE_POWER_UP_KEY_VAL1 0X23DCFD01 //amlogic tv ir --- power
#define CONFIG_IR_REMOTE_POWER_UP_KEY_VAL2 0Xffffffff //amlogic tv ir --- ch+
#define CONFIG_IR_REMOTE_POWER_UP_KEY_VAL3 0xffffffff //amlogic tv ir --- ch-
#define CONFIG_IR_REMOTE_POWER_UP_KEY_VAL4 0xBA45BD02
正确。

dts中power键码值的修改检查:
REMOTE_KEY(0xdc,1) //POWER
也正确。

kl映射文件确认:
key 1    POWER                  #POWER
也正确没错。

=========================================================
想不出来哪里的问题了。
最后排查发现:
当我们进入suspend之后,kernel将所有的外设驱动都进入了suspend休眠,也包括IR红外,只有uboot在工作。这个时候,我们按下遥控器的POWER键,是uboot接收到POWER键,uboot切换IO口唤醒kernel了,kernel的红外驱动里面的resume函数判断如果是按键唤醒的,驱动会生成一个POWER按键的按键事件向上层:
if (get_resume_method() == REMOTE_WAKEUP) {
 input_dbg("remote_wakeup\n");
 input_event(gp_remote->input, EV_KEY, KEY_POWER, 1);
 input_sync(gp_remote->input);
 input_event(gp_remote->input, EV_KEY, KEY_POWER, 0);
 input_sync(gp_remote->input);
 }

KEY_POWER的定义在如下文件中,值为:116.所以android收到的是116,而不是1.所以无法唤醒。
include/dt-bindings/input/input.h:128:#define KEY_POWER         116     /* SC System Power Down */
include/uapi/linux/input.h:331:#define KEY_POWER                116    /* SC System Power Down */

所以解决这个问题,我们可以修改这里的定义改为1,或者在android的kl按键映射文件中,增加
key          116              POWER
就可以唤醒啦。

最新喜欢:

zhaoyf13zhaoyf...
If you have nothing to lose, then you can do anything.
沙发#
发布于:2019-12-19 09:16
思路清晰,条理清楚
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
游客

返回顶部