我需要通过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_dev_pm_explicit_set
中使用acpi_evaluate_object
,这似乎也适用于触摸屏设备。
我不使用Linux,而是使用Genode和Acpica库。
通过ACPI成功启用触摸屏设备我错过了什么? Linux内核是否隐式初始化(我找不到这样的东西)?