組み込み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アラームタイマーによって起動します。

ベストアンサー1

おすすめ記事