[PATCH 0/6] platform/x86: lenovo-wmi-{capdata,other}: Add HWMON for fan speed

Rong Zhang posted 6 patches 3 months, 2 weeks ago
There is a newer version of this series
.../wmi/devices/lenovo-wmi-other.rst          |  32 +
drivers/platform/x86/lenovo/Kconfig           |   5 +-
drivers/platform/x86/lenovo/Makefile          |   2 +-
drivers/platform/x86/lenovo/wmi-capdata.c     | 545 ++++++++++++++++++
drivers/platform/x86/lenovo/wmi-capdata.h     |  46 ++
drivers/platform/x86/lenovo/wmi-capdata01.c   | 302 ----------
drivers/platform/x86/lenovo/wmi-capdata01.h   |  25 -
drivers/platform/x86/lenovo/wmi-other.c       | 422 +++++++++++++-
8 files changed, 1028 insertions(+), 351 deletions(-)
create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.c
create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.h
delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.c
delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.h
[PATCH 0/6] platform/x86: lenovo-wmi-{capdata,other}: Add HWMON for fan speed
Posted by Rong Zhang 3 months, 2 weeks ago
Lenovo WMI Other Mode interface also supports querying or setting fan
speed RPM. This capability is decribed by LENOVO_CAPABILITY_DATA_00.
Besides, LENOVO_FAN_TEST_DATA provides reference data for self-test of
cooling fans, including minimum and maximum fan speed RPM.

This patchset turns lenovo-wmi-capdata01 into a unified driver (now
named lenovo-wmi-capdata) for LENOVO_CAPABILITY_DATA_{00,01} and
LENOVO_FAN_TEST_DATA; then adds HWMON support for lenovo-wmi-other:

 - fanX_enable: enable/disable the fan (tunable)
 - fanX_input: current RPM
 - fanX_max: maximum RPM
 - fanX_min: minimum RPM
 - fanX_target: target RPM (tunable)

This implementation doesn't require all capability data to be available,
and is capable to expose interfaces accordingly:

 - Having LENOVO_CAPABILITY_DATA_00: exposes fanX_{enable,input,target}
 - Having LENOVO_CAPABILITY_DATA_01: exposes firmware_attributes
 - Having LENOVO_FAN_TEST_DATA: exposes fanX_{max,min}

Rong Zhang (6):
  platform/x86: Rename lenovo-wmi-capdata01 to lenovo-wmi-capdata
  platform/x86: lenovo-wmi-{capdata,other}: Support multiple Capability
    Data
  platform/x86: lenovo-wmi-capdata: Add support for Capability Data 00
  platform/x86: lenovo-wmi-other: Add HWMON for fan speed RPM
  platform/x86: lenovo-wmi-capdata: Add support for Fan Test Data
  platform/x86: lenovo-wmi-other: Report min/max RPM and hide dummy fans

 .../wmi/devices/lenovo-wmi-other.rst          |  32 +
 drivers/platform/x86/lenovo/Kconfig           |   5 +-
 drivers/platform/x86/lenovo/Makefile          |   2 +-
 drivers/platform/x86/lenovo/wmi-capdata.c     | 545 ++++++++++++++++++
 drivers/platform/x86/lenovo/wmi-capdata.h     |  46 ++
 drivers/platform/x86/lenovo/wmi-capdata01.c   | 302 ----------
 drivers/platform/x86/lenovo/wmi-capdata01.h   |  25 -
 drivers/platform/x86/lenovo/wmi-other.c       | 422 +++++++++++++-
 8 files changed, 1028 insertions(+), 351 deletions(-)
 create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.c
 create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.h
 delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.c
 delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.h


base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
-- 
2.51.0
Re: [PATCH 0/6] platform/x86: lenovo-wmi-{capdata,other}: Add HWMON for fan speed
Posted by Derek John Clark 3 months, 2 weeks ago
On Sun, Oct 19, 2025 at 2:05 PM Rong Zhang <i@rong.moe> wrote:
>
> Lenovo WMI Other Mode interface also supports querying or setting fan
> speed RPM. This capability is decribed by LENOVO_CAPABILITY_DATA_00.
> Besides, LENOVO_FAN_TEST_DATA provides reference data for self-test of
> cooling fans, including minimum and maximum fan speed RPM.
>
> This patchset turns lenovo-wmi-capdata01 into a unified driver (now
> named lenovo-wmi-capdata) for LENOVO_CAPABILITY_DATA_{00,01} and
> LENOVO_FAN_TEST_DATA; then adds HWMON support for lenovo-wmi-other:
>
>  - fanX_enable: enable/disable the fan (tunable)
>  - fanX_input: current RPM
>  - fanX_max: maximum RPM
>  - fanX_min: minimum RPM
>  - fanX_target: target RPM (tunable)
>
> This implementation doesn't require all capability data to be available,
> and is capable to expose interfaces accordingly:
>
>  - Having LENOVO_CAPABILITY_DATA_00: exposes fanX_{enable,input,target}
>  - Having LENOVO_CAPABILITY_DATA_01: exposes firmware_attributes
>  - Having LENOVO_FAN_TEST_DATA: exposes fanX_{max,min}
>
> Rong Zhang (6):
>   platform/x86: Rename lenovo-wmi-capdata01 to lenovo-wmi-capdata
>   platform/x86: lenovo-wmi-{capdata,other}: Support multiple Capability
>     Data
>   platform/x86: lenovo-wmi-capdata: Add support for Capability Data 00
>   platform/x86: lenovo-wmi-other: Add HWMON for fan speed RPM
>   platform/x86: lenovo-wmi-capdata: Add support for Fan Test Data
>   platform/x86: lenovo-wmi-other: Report min/max RPM and hide dummy fans
>
>  .../wmi/devices/lenovo-wmi-other.rst          |  32 +
>  drivers/platform/x86/lenovo/Kconfig           |   5 +-
>  drivers/platform/x86/lenovo/Makefile          |   2 +-
>  drivers/platform/x86/lenovo/wmi-capdata.c     | 545 ++++++++++++++++++
>  drivers/platform/x86/lenovo/wmi-capdata.h     |  46 ++
>  drivers/platform/x86/lenovo/wmi-capdata01.c   | 302 ----------
>  drivers/platform/x86/lenovo/wmi-capdata01.h   |  25 -
>  drivers/platform/x86/lenovo/wmi-other.c       | 422 +++++++++++++-
>  8 files changed, 1028 insertions(+), 351 deletions(-)
>  create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.c
>  create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.h
>  delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.c
>  delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.h
>
>
> base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
> --
> 2.51.0
>

The series' intention looks good overall. The composable methods for
additional capdata interfaces is a welcome change. I have a few
comments I'll add for a couple of the patches. My apologies for the
slow review timeline, I've been on travel and wanted to test the
changes before submitting a review.

For testing I'm using my Legion Go 2. It apparently doesn't have the
FAN_TEST_DATA GUID, and the hwmon interface errors on all inputs
despite being visible. I know for the Legion Go series they use a fan
table with 10 auto_set points in the Other Method interface tied to
the platform profile, but the documentation I have says the methods
you're adding here should be available on all models, so that is a bit
strange.

dmesg output:
[    3.995549] lenovo_wmi_cd 362A3AFE-3D96-4665-8530-96DAD5BB300E-13:
registered LENOVO_CAPABILITY_DATA_00 with 33 items
[    4.000266] lenovo_wmi_cd 7A8F5407-CB67-4D6E-B547-39B3BE018154-9:
registered LENOVO_CAPABILITY_DATA_01 with 80 items
[    4.005603] lenovo_wmi_other
DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
362A3AFE-3D96-4665-8530-96DAD5BB300E-13 (ops lwmi_cd_component_ops
[lenovo_wmi_capdata])
[    4.005611] lenovo_wmi_other
DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
7A8F5407-CB67-4D6E-B547-39B3BE018154-9 (ops lwmi_cd_component_ops
[lenovo_wmi_capdata])
[    4.005614] lenovo_wmi_other
DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: fan capdata unavailable

Testing results:
(deck@lego2 hwmon5)$ ls
device  fan1_enable  fan1_input  fan1_target  name  power  subsystem  uevent
(deck@lego2 hwmon5)$ cat fan1_enable
cat: fan1_enable: No data available
(1)(deck@lego2 hwmon5)$ echo 1 | sudo tee fan1_enable
[sudo] password for deck:
1
tee: fan1_enable: Input/output error
(1)(deck@lego2 hwmon5)$ echo 0 | sudo tee fan1_enable
0
tee: fan1_enable: Input/output error
(1)(deck@lego2 hwmon5)$ echo 3000 | sudo tee fan1_target
3000
tee: fan1_target: Input/output error
(1)(deck@lego2 hwmon5)$ cat fan1_input
cat: fan1_input: No such device or address

Thanks,
Derek
Re: [PATCH 0/6] platform/x86: lenovo-wmi-{capdata,other}: Add HWMON for fan speed
Posted by Rong Zhang 3 months, 1 week ago
Hi Derek,

On Sat, 2025-10-25 at 21:39 -0700, Derek John Clark wrote:
> On Sun, Oct 19, 2025 at 2:05 PM Rong Zhang <i@rong.moe> wrote:
> > 
> > Lenovo WMI Other Mode interface also supports querying or setting fan
> > speed RPM. This capability is decribed by LENOVO_CAPABILITY_DATA_00.
> > Besides, LENOVO_FAN_TEST_DATA provides reference data for self-test of
> > cooling fans, including minimum and maximum fan speed RPM.
> > 
> > This patchset turns lenovo-wmi-capdata01 into a unified driver (now
> > named lenovo-wmi-capdata) for LENOVO_CAPABILITY_DATA_{00,01} and
> > LENOVO_FAN_TEST_DATA; then adds HWMON support for lenovo-wmi-other:
> > 
> >  - fanX_enable: enable/disable the fan (tunable)
> >  - fanX_input: current RPM
> >  - fanX_max: maximum RPM
> >  - fanX_min: minimum RPM
> >  - fanX_target: target RPM (tunable)
> > 
> > This implementation doesn't require all capability data to be available,
> > and is capable to expose interfaces accordingly:
> > 
> >  - Having LENOVO_CAPABILITY_DATA_00: exposes fanX_{enable,input,target}
> >  - Having LENOVO_CAPABILITY_DATA_01: exposes firmware_attributes
> >  - Having LENOVO_FAN_TEST_DATA: exposes fanX_{max,min}
> > 
> > Rong Zhang (6):
> >   platform/x86: Rename lenovo-wmi-capdata01 to lenovo-wmi-capdata
> >   platform/x86: lenovo-wmi-{capdata,other}: Support multiple Capability
> >     Data
> >   platform/x86: lenovo-wmi-capdata: Add support for Capability Data 00
> >   platform/x86: lenovo-wmi-other: Add HWMON for fan speed RPM
> >   platform/x86: lenovo-wmi-capdata: Add support for Fan Test Data
> >   platform/x86: lenovo-wmi-other: Report min/max RPM and hide dummy fans
> > 
> >  .../wmi/devices/lenovo-wmi-other.rst          |  32 +
> >  drivers/platform/x86/lenovo/Kconfig           |   5 +-
> >  drivers/platform/x86/lenovo/Makefile          |   2 +-
> >  drivers/platform/x86/lenovo/wmi-capdata.c     | 545 ++++++++++++++++++
> >  drivers/platform/x86/lenovo/wmi-capdata.h     |  46 ++
> >  drivers/platform/x86/lenovo/wmi-capdata01.c   | 302 ----------
> >  drivers/platform/x86/lenovo/wmi-capdata01.h   |  25 -
> >  drivers/platform/x86/lenovo/wmi-other.c       | 422 +++++++++++++-
> >  8 files changed, 1028 insertions(+), 351 deletions(-)
> >  create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.c
> >  create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.h
> >  delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.c
> >  delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.h
> > 
> > 
> > base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
> > --
> > 2.51.0
> > 
> 
> The series' intention looks good overall. The composable methods for
> additional capdata interfaces is a welcome change. I have a few
> comments I'll add for a couple of the patches. My apologies for the
> slow review timeline, I've been on travel and wanted to test the
> changes before submitting a review.

Thanks for you review and testing! Hope you have/had a nice trip ;)

> For testing I'm using my Legion Go 2. It apparently doesn't have the
> FAN_TEST_DATA GUID, and the hwmon interface errors on all inputs
> despite being visible. I know for the Legion Go series they use a fan
> table with 10 auto_set points in the Other Method interface tied to
> the platform profile, but the documentation I have says the methods
> you're adding here should be available on all models, so that is a bit
> strange.

Yeah, that sounds weird.

As for the fan table on your device, did you mean
LENOVO_FAN_TABLE_DATA/LENOVO_FAN_METHOD? My device doesn't use a fan
table, the corresponding ACPI methods are dummy (see below).

My device is ThinkBook 14 G7+ ASP (forgot to mention when submitting,
sorry). I don't have any documentation and I finished the patchset
according to the MOF as well as the decompiled ASL code of its ACPI
tables. The information from the documentation (including those in your
following replies) is very useful, thanks for that!

As it's branded as ThinkBook, most GAMEZONE/WMI_OTHER interfaces on my
device may differ from Legion devices. To summerize:

- LENOVO_GAMEZONE_DATA: dummy ACPI method.
- LENOVO_GAMEZONE_CPU_OC_DATA: presents in MOF; missing ACPI method.
- LENOVO_GAMEZONE_GPU_OC_DATA: dummy ACPI method.
- LENOVO_CAPABILITY_DATA_00: works fine.
- LENOVO_CAPABILITY_DATA_01: dummy ACPI method, data still presents
  (\_SB.GZFD.CD01).
- LENOVO_FAN_TEST_DATA: works fine.
- LENOVO_FAN_TABLE_DATA: dummy ACPI method.
- LENOVO_FAN_METHOD: dummy ACPI method.
- LENOVO_OTHER_METHOD:
  * Despite missing LENOVO_CAPABILITY_DATA_01, SPPT/SPL/FPPT can still
    be get/set. There is also CHTC (FEATURE_ID=4, get/set) which I am
    not sure what it means.
  * FAN1/2: get method reads data from the EC; set method for FAN1
    updates the EC, for FAN2 is dummy (no-op, returns 0).

> dmesg output:
> [    3.995549] lenovo_wmi_cd 362A3AFE-3D96-4665-8530-96DAD5BB300E-13:
> registered LENOVO_CAPABILITY_DATA_00 with 33 items
> [    4.000266] lenovo_wmi_cd 7A8F5407-CB67-4D6E-B547-39B3BE018154-9:
> registered LENOVO_CAPABILITY_DATA_01 with 80 items
> [    4.005603] lenovo_wmi_other
> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
> 362A3AFE-3D96-4665-8530-96DAD5BB300E-13 (ops lwmi_cd_component_ops
> [lenovo_wmi_capdata])
> [    4.005611] lenovo_wmi_other
> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
> 7A8F5407-CB67-4D6E-B547-39B3BE018154-9 (ops lwmi_cd_component_ops
> [lenovo_wmi_capdata])
> [    4.005614] lenovo_wmi_other
> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: fan capdata unavailable
> 
> Testing results:
> (deck@lego2 hwmon5)$ ls
> device  fan1_enable  fan1_input  fan1_target  name  power  subsystem  uevent
> (deck@lego2 hwmon5)$ cat fan1_enable
> cat: fan1_enable: No data available
> (1)(deck@lego2 hwmon5)$ echo 1 | sudo tee fan1_enable
> [sudo] password for deck:
> 1
> tee: fan1_enable: Input/output error
> (1)(deck@lego2 hwmon5)$ echo 0 | sudo tee fan1_enable
> 0
> tee: fan1_enable: Input/output error
> (1)(deck@lego2 hwmon5)$ echo 3000 | sudo tee fan1_target
> 3000
> tee: fan1_target: Input/output error

-EIO was returned when the set method didn't return 1 (as long as
lwmi_dev_evaluate_int() didn't return this due to ACPI_FAILURE).
Despite the return value, did the fan speed change after writing?
Otherwise the method might be dummy and LENOVO_CAPABILITY_DATA_00
simply returned mistaken data :(

> (1)(deck@lego2 hwmon5)$ cat fan1_input
> cat: fan1_input: No such device or address

-ENXIO was returned by lwmi_dev_evaluate_int() as the return value was
not an integer. It's really weird. Could you check the type of the
return value? Some clues may also lie in the ASL code of the ACPI
method.

> Thanks,
> Derek

Thanks,
Rong
Re: [PATCH 0/6] platform/x86: lenovo-wmi-{capdata,other}: Add HWMON for fan speed
Posted by Armin Wolf 3 months, 1 week ago
Am 26.10.25 um 18:11 schrieb Rong Zhang:

> Hi Derek,
>
> On Sat, 2025-10-25 at 21:39 -0700, Derek John Clark wrote:
>> On Sun, Oct 19, 2025 at 2:05 PM Rong Zhang <i@rong.moe> wrote:
>>> Lenovo WMI Other Mode interface also supports querying or setting fan
>>> speed RPM. This capability is decribed by LENOVO_CAPABILITY_DATA_00.
>>> Besides, LENOVO_FAN_TEST_DATA provides reference data for self-test of
>>> cooling fans, including minimum and maximum fan speed RPM.
>>>
>>> This patchset turns lenovo-wmi-capdata01 into a unified driver (now
>>> named lenovo-wmi-capdata) for LENOVO_CAPABILITY_DATA_{00,01} and
>>> LENOVO_FAN_TEST_DATA; then adds HWMON support for lenovo-wmi-other:
>>>
>>>   - fanX_enable: enable/disable the fan (tunable)
>>>   - fanX_input: current RPM
>>>   - fanX_max: maximum RPM
>>>   - fanX_min: minimum RPM
>>>   - fanX_target: target RPM (tunable)
>>>
>>> This implementation doesn't require all capability data to be available,
>>> and is capable to expose interfaces accordingly:
>>>
>>>   - Having LENOVO_CAPABILITY_DATA_00: exposes fanX_{enable,input,target}
>>>   - Having LENOVO_CAPABILITY_DATA_01: exposes firmware_attributes
>>>   - Having LENOVO_FAN_TEST_DATA: exposes fanX_{max,min}
>>>
>>> Rong Zhang (6):
>>>    platform/x86: Rename lenovo-wmi-capdata01 to lenovo-wmi-capdata
>>>    platform/x86: lenovo-wmi-{capdata,other}: Support multiple Capability
>>>      Data
>>>    platform/x86: lenovo-wmi-capdata: Add support for Capability Data 00
>>>    platform/x86: lenovo-wmi-other: Add HWMON for fan speed RPM
>>>    platform/x86: lenovo-wmi-capdata: Add support for Fan Test Data
>>>    platform/x86: lenovo-wmi-other: Report min/max RPM and hide dummy fans
>>>
>>>   .../wmi/devices/lenovo-wmi-other.rst          |  32 +
>>>   drivers/platform/x86/lenovo/Kconfig           |   5 +-
>>>   drivers/platform/x86/lenovo/Makefile          |   2 +-
>>>   drivers/platform/x86/lenovo/wmi-capdata.c     | 545 ++++++++++++++++++
>>>   drivers/platform/x86/lenovo/wmi-capdata.h     |  46 ++
>>>   drivers/platform/x86/lenovo/wmi-capdata01.c   | 302 ----------
>>>   drivers/platform/x86/lenovo/wmi-capdata01.h   |  25 -
>>>   drivers/platform/x86/lenovo/wmi-other.c       | 422 +++++++++++++-
>>>   8 files changed, 1028 insertions(+), 351 deletions(-)
>>>   create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.c
>>>   create mode 100644 drivers/platform/x86/lenovo/wmi-capdata.h
>>>   delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.c
>>>   delete mode 100644 drivers/platform/x86/lenovo/wmi-capdata01.h
>>>
>>>
>>> base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
>>> --
>>> 2.51.0
>>>
>> The series' intention looks good overall. The composable methods for
>> additional capdata interfaces is a welcome change. I have a few
>> comments I'll add for a couple of the patches. My apologies for the
>> slow review timeline, I've been on travel and wanted to test the
>> changes before submitting a review.
> Thanks for you review and testing! Hope you have/had a nice trip ;)
>
>> For testing I'm using my Legion Go 2. It apparently doesn't have the
>> FAN_TEST_DATA GUID, and the hwmon interface errors on all inputs
>> despite being visible. I know for the Legion Go series they use a fan
>> table with 10 auto_set points in the Other Method interface tied to
>> the platform profile, but the documentation I have says the methods
>> you're adding here should be available on all models, so that is a bit
>> strange.
> Yeah, that sounds weird.
>
> As for the fan table on your device, did you mean
> LENOVO_FAN_TABLE_DATA/LENOVO_FAN_METHOD? My device doesn't use a fan
> table, the corresponding ACPI methods are dummy (see below).
>
> My device is ThinkBook 14 G7+ ASP (forgot to mention when submitting,
> sorry). I don't have any documentation and I finished the patchset
> according to the MOF as well as the decompiled ASL code of its ACPI
> tables. The information from the documentation (including those in your
> following replies) is very useful, thanks for that!
>
> As it's branded as ThinkBook, most GAMEZONE/WMI_OTHER interfaces on my
> device may differ from Legion devices. To summerize:
>
> - LENOVO_GAMEZONE_DATA: dummy ACPI method.
> - LENOVO_GAMEZONE_CPU_OC_DATA: presents in MOF; missing ACPI method.
> - LENOVO_GAMEZONE_GPU_OC_DATA: dummy ACPI method.
> - LENOVO_CAPABILITY_DATA_00: works fine.
> - LENOVO_CAPABILITY_DATA_01: dummy ACPI method, data still presents
>    (\_SB.GZFD.CD01).
> - LENOVO_FAN_TEST_DATA: works fine.
> - LENOVO_FAN_TABLE_DATA: dummy ACPI method.
> - LENOVO_FAN_METHOD: dummy ACPI method.
> - LENOVO_OTHER_METHOD:
>    * Despite missing LENOVO_CAPABILITY_DATA_01, SPPT/SPL/FPPT can still
>      be get/set. There is also CHTC (FEATURE_ID=4, get/set) which I am
>      not sure what it means.
>    * FAN1/2: get method reads data from the EC; set method for FAN1
>      updates the EC, for FAN2 is dummy (no-op, returns 0).
>
>> dmesg output:
>> [    3.995549] lenovo_wmi_cd 362A3AFE-3D96-4665-8530-96DAD5BB300E-13:
>> registered LENOVO_CAPABILITY_DATA_00 with 33 items
>> [    4.000266] lenovo_wmi_cd 7A8F5407-CB67-4D6E-B547-39B3BE018154-9:
>> registered LENOVO_CAPABILITY_DATA_01 with 80 items
>> [    4.005603] lenovo_wmi_other
>> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
>> 362A3AFE-3D96-4665-8530-96DAD5BB300E-13 (ops lwmi_cd_component_ops
>> [lenovo_wmi_capdata])
>> [    4.005611] lenovo_wmi_other
>> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: bound
>> 7A8F5407-CB67-4D6E-B547-39B3BE018154-9 (ops lwmi_cd_component_ops
>> [lenovo_wmi_capdata])
>> [    4.005614] lenovo_wmi_other
>> DC2A8805-3A8C-41BA-A6F7-092E0089CD3B-3: fan capdata unavailable
>>
>> Testing results:
>> (deck@lego2 hwmon5)$ ls
>> device  fan1_enable  fan1_input  fan1_target  name  power  subsystem  uevent
>> (deck@lego2 hwmon5)$ cat fan1_enable
>> cat: fan1_enable: No data available
>> (1)(deck@lego2 hwmon5)$ echo 1 | sudo tee fan1_enable
>> [sudo] password for deck:
>> 1
>> tee: fan1_enable: Input/output error
>> (1)(deck@lego2 hwmon5)$ echo 0 | sudo tee fan1_enable
>> 0
>> tee: fan1_enable: Input/output error
>> (1)(deck@lego2 hwmon5)$ echo 3000 | sudo tee fan1_target
>> 3000
>> tee: fan1_target: Input/output error
> -EIO was returned when the set method didn't return 1 (as long as
> lwmi_dev_evaluate_int() didn't return this due to ACPI_FAILURE).
> Despite the return value, did the fan speed change after writing?
> Otherwise the method might be dummy and LENOVO_CAPABILITY_DATA_00
> simply returned mistaken data :(
>
>> (1)(deck@lego2 hwmon5)$ cat fan1_input
>> cat: fan1_input: No such device or address
> -ENXIO was returned by lwmi_dev_evaluate_int() as the return value was
> not an integer. It's really weird. Could you check the type of the
> return value? Some clues may also lie in the ASL code of the ACPI
> method.

The Windows WMI-ACPI driver converts all ACPI objects into a common buffer
format, so returning a buffer with four bytes will look like an integer
for WMI consumers under Windows.

I already have patches for that, but for now i suggest that you handle
this inside lwmi_dev_evaluate_int() yourself.

Thanks,
Armin Wolf

>> Thanks,
>> Derek
> Thanks,
> Rong
>