У меня есть контроллер сенсорного экрана (который является подчиненным I2C), который мне нужно включить через APCI. Это должно быть сделано путем вызова _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
в acpi_dev_pm_explicit_set
который также, кажется, работает на устройстве с сенсорным экраном.
Я не использую Linux, но Genode и библиотеку Acpica.
что мне не хватает, чтобы успешно включить устройство с сенсорным экраном через ACPI? Есть ли что-то, что ядро Linux инициализирует неявно (я не мог найти что-то подобное)?
Задача ещё не решена.
Других решений пока нет …