嵌入式Linux(5.10.24)下GT911触摸屏唤醒功能失效求助
基于Kernel 5.10.24的GT911触摸屏唤醒休眠系统问题排查与必要条件分析
环境与现状
- 基于kernel-5.10.24版本的嵌入式Linux系统,搭载GT911触摸屏,触摸屏基础功能正常
- 系统RTC定时唤醒功能正常:设置120秒后唤醒,休眠时屏幕黑屏,唤醒后触摸屏可恢复正常工作
已做操作与验证
- 发现设备树未启用slide-wake功能,添加如下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相关唤醒设备条目
问题现象
执行echo standby > /sys/power/state使系统进入休眠后,触摸屏幕(点击/滑动)无法唤醒系统,只能等待RTC定时120秒自动唤醒
驱动相关代码片段
使用的GT9xx驱动中,唤醒相关核心函数:
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"); 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"); return -EINVAL; }
gtp_probe()中设置唤醒功能的代码:
gtp_work_control_enable(ts, false); if (ts->pdata->slide_wakeup) { dev_info(&client->dev, "slide wakeup enabled"); ret = enable_irq_wake(client->irq); if (ret < 0) dev_err(&client->dev, "Failed set irq wake"); }
触摸屏唤醒休眠系统的必要条件分析
1. 硬件层面
- GT911芯片本身需支持低功耗唤醒模式,且硬件连接正确:中断引脚必须连接到SOC的可唤醒中断GPIO引脚,该GPIO需具备休眠唤醒能力
- 休眠期间触摸屏电源不能被完全切断,需保留维持低功耗待机的供电
- 确认触摸中断的硬件触发方式(上升沿/下降沿/双边沿)与驱动配置一致(日志中trigger type:2对应双边沿触发)
2. 设备树配置
- 除
goodix,slide-wakeup = <1>外,需确保触摸屏节点的中断配置完整,包括中断触发类型、GPIO的唤醒属性配置(如gpio-hog、wakeup-source标记) - 需配置SOC侧对应GPIO的电源管理属性,确保休眠时该GPIO不会被禁用
3. 驱动层面
- 必须成功调用
enable_irq_wake()将触摸屏中断注册为唤醒源:需检查gtp_probe中该函数的返回值是否为0,若返回错误需排查中断申请/配置问题 - 驱动需实现完整的电源管理回调(
struct dev_pm_ops):在suspend回调中需将GT911配置为低功耗待机模式,开启触摸唤醒中断;在resume回调中调用gtp_wakeup_sleep恢复触摸屏工作 - 确保中断处理函数未被屏蔽,且触摸事件触发的中断能被SOC识别为唤醒信号
4. 系统电源管理配置
- 内核需开启休眠唤醒相关配置:如
CONFIG_PM_SLEEP、CONFIG_PM_WAKELOCKS、CONFIG_PM_WAKEUP_SOURCE等 - 确认系统休眠模式(standby)支持外设唤醒:部分SOC的standby模式可能限制唤醒源,需核对SOC电源管理文档
- 确保gt9xx唤醒设备处于启用状态:执行
echo enabled > /sys/class/wakeup/[gt9xx设备名]/power/wakeup(替换为实际设备名)
内容的提问来源于stack exchange,提问作者wangt13
相关产品推荐
相关产品推荐

