저는 임베디드 Linux(kernel-5.10.24)용으로 개발 중이며 GT911 기반 터치스크린을 사용하고 있습니다. 이제 터치스크린이 잘 작동합니다.
그런 다음 이 시스템에서 일시 중지/재개를 테스트해 보았습니다. 120초 안에 시스템을 깨우도록 구성된 RTC가 있고 효과도 매우 좋습니다. 일시 정지 시 터치 스크린도 검은색으로 변했다가 다시 시작하면 다시 작동됩니다.
현재 화면 터치를 통해 시스템을 깨우고 싶지만 실패합니다. 장치 트리에서 슬라이드 깨우기 기능을 활성화하지 않는 것을 발견하여 아래와 같이 dts를 변경했습니다.
goodix,slide-wakeup = <1>;
커널 로그에서 wakeup이 활성화된 것을 볼 수 있습니다.
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 알람 타이머에 의해 깨어납니다.