임베디드 Linux에서 터치 스크린이 작동하지 않음

임베디드 Linux에서 터치 스크린이 작동하지 않음

저는 임베디드 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 알람 타이머에 의해 깨어납니다.

관련 정보