从触摸屏唤醒在嵌入式 Linux 中不起作用

从触摸屏唤醒在嵌入式 Linux 中不起作用

我正在开发嵌入式 Linux (kernel-5.10.24),并且有一个基于 GT911 的触摸屏。触摸屏现在工作正常。

然后我尝试测试该系统中的挂起/恢复。有一个RTC,配置为120秒唤醒系统,效果也很好,触摸屏在暂停时也是黑色的,恢复后又恢复工作。

目前,我想通过屏幕触摸唤醒系统但失败。我发现设备树没有启用滑动唤醒功能,所以我更改了 dts,如下所示,

goodix,slide-wakeup = <1>;

我可以从内核日志中看到唤醒已启用。

goodix-ts 0-0004: slide-wakeup enabled
goodix-ts 0-0004: INT num 36, trigger type:2
goodix-ts 0-0004: slide wakeup enabled

我可以看到/sys/class/wakeup/*显示了有关 gt9xx 的名称。

当我将系统置于挂起模式时,我仍然无法通过触摸屏幕唤醒系统。

我对 Linux 挂起/恢复架构不太熟悉,我想知道从触摸屏唤醒系统需要什么。

gt9xx 代码来自https://github.com/goodix/gt9xx_driver_android/blob/master/gt9xx.c

其功能如下:

static int gtp_wakeup_sleep(struct goodix_ts_data *ts)
{
    u8 retry = 0;
    int ret = -1;

    while (retry++ < 10) {
        gtp_int_output(ts, 1);
        usleep_range(5000, 6000);

        ret = gtp_i2c_test(ts->client);
        if (!ret) {
            dev_dbg(&ts->client->dev, "Success wakeup sleep\n");

            gtp_int_sync(ts, 25);
            if (ts->pdata->esd_protect)
                gtp_init_ext_watchdog(ts->client);

            return ret;
        }
        gtp_reset_guitar(ts->client, 20);
    }

    dev_err(&ts->client->dev, "Failed wakeup from sleep mode\n");
    return -EINVAL;
}

并在gtp_probe() 其中执行以下操作来设置唤醒。

    gtp_work_control_enable(ts, false);
    if (ts->pdata->slide_wakeup) {
        dev_info(&client->dev, "slide wakeup enabled\n");
        ret = enable_irq_wake(client->irq);
        if (ret < 0)
            dev_err(&client->dev, "Failed set irq wake\n");
    }

为了测试代码,我做了以下操作, echo standby > /sys/power/state.系统已暂停。
我触摸屏幕(点击并滑动)来唤醒系统,但失败了。
120 秒后系统被 RTC 闹钟定时器唤醒。

相关内容