Johannes Kliemann Johannes.Kliemann at ...250...
Thu Aug 3 13:29:21 CEST 2017

Hi again,

first, I have posted this question already on Stackoverflow [1] and
Reddit [2] but forgot to put it on the mailing list.

> I have a touchscreen controller (which is an I2C slave) that I need to enable via APCI. This should be done by calling the _PS0 ACPI method. I call this method by using AcpiEvaluateObject with no arguments and no return values.
> When calling this method on the parent object (I2C4), everything goes fine but calling it on the touch screen controller (TCS2), it fails. What also makes me wonder is that it returns AE_AML_UNINITIALIZED_ARG even though it doesn't take any args (according to the DSDT).
> Calling the _CRS method on the same object also works without any problems. I also looked into the Linux kernel source how they change ACPI power states and they use the exact same mechanism. It boils down to the use of acpi_evaluate_object in acpi_dev_pm_explicit_set which also seems to work on the touchscreen device.
> what am I missing to successfully enable the touchscreen device via ACPI? Is there something the Linux kernel is initializing implicitly (I couldn't find something like this)?

The current workaround for this issue is to use the GPIO pins to enable
the controller. But this isn't the desired way since it requires an
additional GPIO driver that takes ~100 LOC and also a separate ACPI
initialization for this driver.

Besides that other functions that are needed to get initial parameters
return errors. On the specific device I have the following examples:

> \_SB_.I2C4.SSCN
> \_SB_.I2C4.FMCN
> \_SB_.I2C4.FPCN
> \_SB_.I2C4.HSCN

Similar things also happen on the GPIO device (\_SB_.GPO1).



More information about the users mailing list