Hi, On 4/14/23 20:02, Daniel Bertalan wrote: > On the X380 Yoga, the `ECRD` and `ECWR` ACPI objects cannot be used for > accessing the Embedded Controller: instead of a method that reads from > the EC's memory, `ECRD` is the name of a location in high memory. This > meant that trying to call them would fail with the following message: > > ACPI: \_SB.PCI0.LPCB.EC.ECRD: 1 arguments were passed to a non-method > ACPI object (RegionField) > > With this commit, it is now possible to access the EC and read > temperature and fan speed information. Note that while writes to the > HFSP register do go through (as indicated by subsequent reads showing > the new value), the fan does not actually change its speed. > > Signed-off-by: Daniel Bertalan <dani@xxxxxxxxxxxxxxxxxx> Thank you for your patch, I've applied this patch to my review-hans branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans Note it will show up in my review-hans branch once I've pushed my local branch there, which might take a while. Once I've run some tests on this branch the patches there will be added to the platform-drivers-x86/for-next branch and eventually will be included in the pdx86 pull-request to Linus for the next merge-window. Regards, Hans > --- > drivers/platform/x86/thinkpad_acpi.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c > index 7191ff2625b1..6fe82f805ea8 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -11699,6 +11699,7 @@ static int __init thinkpad_acpi_module_init(void) > { > const struct dmi_system_id *dmi_id; > int ret, i; > + acpi_object_type obj_type; > > tpacpi_lifecycle = TPACPI_LIFE_INIT; > > @@ -11724,6 +11725,21 @@ static int __init thinkpad_acpi_module_init(void) > TPACPI_ACPIHANDLE_INIT(ecrd); > TPACPI_ACPIHANDLE_INIT(ecwr); > > + /* > + * Quirk: in some models (e.g. X380 Yoga), an object named ECRD > + * exists, but it is a register, not a method. > + */ > + if (ecrd_handle) { > + acpi_get_type(ecrd_handle, &obj_type); > + if (obj_type != ACPI_TYPE_METHOD) > + ecrd_handle = NULL; > + } > + if (ecwr_handle) { > + acpi_get_type(ecwr_handle, &obj_type); > + if (obj_type != ACPI_TYPE_METHOD) > + ecwr_handle = NULL; > + } > + > tpacpi_wq = create_singlethread_workqueue(TPACPI_WORKQUEUE_NAME); > if (!tpacpi_wq) { > thinkpad_acpi_module_exit();