ACPI _PS0因UNINITIALIZED_ARG

时间:2017-06-06 06:34:12

标签: c++ operating-system osdev acpi

我需要通过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内核是否隐式初始化(​​我找不到这样的东西)?

0 个答案:

没有答案