我有一个需要通过 APCI 启用的触摸屏控制器(它是一个 I2C 从设备)。这应该通过调用_PS0
ACPI 方法来完成。我通过使用AcpiEvaluateObject
不带参数和不返回值来调用此方法。
AcpiEvaluateObject(nullptr, (ACPI_STRING)"\\_SB.I2C4._PS0", nullptr, nullptr); // returns AE_OK
AcpiEvaluateObject(nullptr, (ACPI_STRING)"\\_SB.I2C4.TCS2._PS0", nullptr, nullptr); // returns AE_AML_UNINITIALIZED_ARG
在父对象 ( I2C4
) 上调用此方法时,一切正常,但在触摸屏控制器 ( TCS2
) 上调用它,则失败。也让我想知道的是,AE_AML_UNINITIALIZED_ARG
即使它不需要任何参数(根据DSDT)它也会返回。
在同一个对象上调用该_CRS
方法也没有任何问题。我还研究了 Linux 内核源代码,它们如何更改 ACPI 电源状态,并且它们使用完全相同的机制。归结为使用acpi_evaluate_object
in acpi_dev_pm_explicit_set
which 似乎也适用于触摸屏设备。
我没有使用 Linux,而是使用 Genode 和 Apicica 库。
通过 ACPI 成功启用触摸屏设备我缺少什么?Linux内核是否正在隐式初始化(我找不到这样的东西)?