我正在开发嵌入式 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 闹钟定时器唤醒。