如何使用gpio-keys中断从睡眠中唤醒系统

时间:2018-05-15 02:11:30

标签: android linux-kernel wakeup keyboardinterrupt android-kernel

更新:我将键盘布局文件(gpio-keys.kl)更改为以下内容:

key 115   POWER     WAKE
key 114   POWER     WAKE

如图所示,我现在在Android中将音量按钮注册为 POWER 键,它唤醒了系统。但是,我希望有任何通用的gpio-key唤醒系统。如上所述更改密钥布局文件的事实告诉我,问题可能在Android端而不是Linux内核端。不确定。也许Android中有文件(策略文件等),我可以为选择的gpio-key提供唤醒功能,就像 POWER 键具有此唤醒功能一样。

请让我知道你的想法。

ORIGINAL: 至于某些背景,我的硬件是三星Galaxy S2-i777,它运行在 Exynos4210 SoC (基于ARM的处理器)上。操作系统 LineageOS 14.1 。我试图使用 gpio-keys 中断从睡眠中唤醒我的系统但是我没有成功。

我在我的电路板文件中配置了gpio-keys(没有设备树作为旧内核版本)。我在下面定义gpio-keys的片段如下:

struct gpio_keys_button u1_buttons[] = {
{
    .code = KEY_VOLUMEUP,
    .gpio = GPIO_VOL_UP,
    .active_low = 1,
    .type = EV_KEY,
    .wakeup = 1,
    .isr_hook = sec_debug_check_crash_key,
    .debounce_interval = 10,
},  
};

我省略了注册平台部分等,但必要时可以显示。如上所示,我将布尔属性 wakeup 设置为1,以使我的gpio GPIO_VOL_UP 充当唤醒源。同样如图所示,我想将我的音量按钮用作我的gpio-keys。 我还修改了我的密钥布局文件(gpio-keys.kl),如下所示:

key 115   VOLUME_UP       WAKE
key 114   VOLUME_DOWN     WAKE

当我在 LineageOS 中查看我的本地终端时,我发现我的 gpio-keys 被定义为 wakeup_sources 唤醒< / strong>已启用。我还看到我的音量按钮正在产生中断(cat / proc / interrupts)。

当我的系统进入睡眠状态时,音量按钮(gpio-keys)不会唤醒我的系统。只有唤醒我的系统的是电源按钮(它似乎也是一个gpio键)。

您认为问题可能是什么?使用gpio-keys中断唤醒系统所需的一般步骤是什么?即使它不是特定于我的硬件,也许这些步骤的一般布局或某些考虑将帮助我,因为我可能会遗漏一些东西。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我建议在挂起状态下按下“音量”按钮时检查控制台中是否有任何日志消息。

第二,我建议您探查硬件行,以检查系统处于深度睡眠状态时每按一次Volume(音量)按钮是否实际上产生了中断。

如果未生成中断,则可能在低功耗模式下禁用了HW部分,因此您将无法唤醒系统。