[PATCH v4 0/2] Add support for Uniwill laptop features

Armin Wolf posted 2 patches 3 days, 18 hours ago
.../ABI/testing/sysfs-driver-uniwill-laptop   |   53 +
Documentation/admin-guide/laptops/index.rst   |    1 +
.../admin-guide/laptops/uniwill-laptop.rst    |   60 +
Documentation/wmi/devices/uniwill-laptop.rst  |  198 +++
MAINTAINERS                                   |   11 +
drivers/platform/x86/Kconfig                  |    2 +
drivers/platform/x86/Makefile                 |    3 +
drivers/platform/x86/uniwill/Kconfig          |   38 +
drivers/platform/x86/uniwill/Makefile         |    8 +
drivers/platform/x86/uniwill/uniwill-acpi.c   | 1547 +++++++++++++++++
drivers/platform/x86/uniwill/uniwill-wmi.c    |   92 +
drivers/platform/x86/uniwill/uniwill-wmi.h    |  127 ++
12 files changed, 2140 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-driver-uniwill-laptop
create mode 100644 Documentation/admin-guide/laptops/uniwill-laptop.rst
create mode 100644 Documentation/wmi/devices/uniwill-laptop.rst
create mode 100644 drivers/platform/x86/uniwill/Kconfig
create mode 100644 drivers/platform/x86/uniwill/Makefile
create mode 100644 drivers/platform/x86/uniwill/uniwill-acpi.c
create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.c
create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.h
[PATCH v4 0/2] Add support for Uniwill laptop features
Posted by Armin Wolf 3 days, 18 hours ago
This patch series adds support for the various features found on
laptops manufactured by Uniwill. Those features are:

 - battery charge limiting
 - RGB lightbar control
 - hwmon support
 - improved hotkey support
 - keyboard-related settings

This patch series is based on the following out-of-tree drivers:

 - https://github.com/pobrn/qc71_laptop
 - https://gitlab.com/tuxedocomputers/development/packages/tuxedo-drivers

Additionally the OEM software of the Intel Nuc x15 was
reverse-engineered to have a better understanding about the underlying
hardware interface.

The first patch introduces the uniwill-laptop driver that consists of
two parts: a WMI part responsible for receiving platform events and
a ACPI part that does the majority of the work by talking to the
underlying embedded controller using the INOU0000 ACPI device.
The whole driver uses a DMI whitelist for identifying supported
notebook models as both the ACPI device ID and the WMI device GUID
are shared with a wide range of notebook models that might use a
different embedded controller register layout.

The second patch additionally adds some documentation for configuring
and using said driver.

Special thanks go to:

 - github user cyear for bring up this topic on the lm-sensors issue
   tracker and being the tester for various prototype versions
 - github user dumingqiao for testing the battery, lightbar and
   keyboard-related features
 - Tuxedo computers for giving advice on how to design the userspace
   interface

NOTE: During testing it turned out that the touchpad_toggle sysfs
attribute does not work. The reason for this is unknown, as the driver
emulates the behaviour of the OEM application just fine. I suspect
that this feature only controls some obscure key combination we dont
know about, so i decided to send out this series regardless.

Changes since v3:
- Add support for UNIWILL_OSD_SUPER_KEY_LOCK_CHANGED event
- rename sysfs files to prepare for future changes
- use kstrtobool() for handling sysfs input
- add proper led locking

Changed since v2:
- Use the INOU0000 ACPI device for talking to the EC as it is much
  faster than the WMI interface used before. Additionally the OEM
  application also uses this ACPI inteface through a special driver.
- Merge the uniwill-wmi driver into the uniwill-laptop driver as
  the WMI driver should only load when matching the DMI whitelist.
- Various small fixes

Changes since v1:
- spelling fixes
- add missing error handling when reading PWM duty cycle
- fix error when setting the super key lock sysfs attribute

Changes since the RFC series:
- spelling fixes
- mention the INOU0000 ACPI device inside thew documentation
- use MILLIDEGREE_PER_DEGREE instead of 1000
- use power_supply_get_property_direct() to prevent deadlock
- add support for KEY_KBDILLUMDOWN and KEY_KBDILLUMUP

Armin Wolf (2):
  platform/x86: Add Uniwill laptop driver
  Documentation: laptops: Add documentation for uniwill laptops

 .../ABI/testing/sysfs-driver-uniwill-laptop   |   53 +
 Documentation/admin-guide/laptops/index.rst   |    1 +
 .../admin-guide/laptops/uniwill-laptop.rst    |   60 +
 Documentation/wmi/devices/uniwill-laptop.rst  |  198 +++
 MAINTAINERS                                   |   11 +
 drivers/platform/x86/Kconfig                  |    2 +
 drivers/platform/x86/Makefile                 |    3 +
 drivers/platform/x86/uniwill/Kconfig          |   38 +
 drivers/platform/x86/uniwill/Makefile         |    8 +
 drivers/platform/x86/uniwill/uniwill-acpi.c   | 1547 +++++++++++++++++
 drivers/platform/x86/uniwill/uniwill-wmi.c    |   92 +
 drivers/platform/x86/uniwill/uniwill-wmi.h    |  127 ++
 12 files changed, 2140 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-driver-uniwill-laptop
 create mode 100644 Documentation/admin-guide/laptops/uniwill-laptop.rst
 create mode 100644 Documentation/wmi/devices/uniwill-laptop.rst
 create mode 100644 drivers/platform/x86/uniwill/Kconfig
 create mode 100644 drivers/platform/x86/uniwill/Makefile
 create mode 100644 drivers/platform/x86/uniwill/uniwill-acpi.c
 create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.c
 create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.h

-- 
2.39.5
Re: [PATCH v4 0/2] Add support for Uniwill laptop features
Posted by Armin Wolf 3 days, 18 hours ago
Am 28.09.25 um 03:32 schrieb Armin Wolf:

> This patch series adds support for the various features found on
> laptops manufactured by Uniwill. Those features are:
>
>   - battery charge limiting
>   - RGB lightbar control
>   - hwmon support
>   - improved hotkey support
>   - keyboard-related settings
>
> This patch series is based on the following out-of-tree drivers:
>
>   - https://github.com/pobrn/qc71_laptop
>   - https://gitlab.com/tuxedocomputers/development/packages/tuxedo-drivers
>
> Additionally the OEM software of the Intel Nuc x15 was
> reverse-engineered to have a better understanding about the underlying
> hardware interface.
>
> The first patch introduces the uniwill-laptop driver that consists of
> two parts: a WMI part responsible for receiving platform events and
> a ACPI part that does the majority of the work by talking to the
> underlying embedded controller using the INOU0000 ACPI device.
> The whole driver uses a DMI whitelist for identifying supported
> notebook models as both the ACPI device ID and the WMI device GUID
> are shared with a wide range of notebook models that might use a
> different embedded controller register layout.
>
> The second patch additionally adds some documentation for configuring
> and using said driver.
>
> Special thanks go to:
>
>   - github user cyear for bring up this topic on the lm-sensors issue
>     tracker and being the tester for various prototype versions
>   - github user dumingqiao for testing the battery, lightbar and
>     keyboard-related features
>   - Tuxedo computers for giving advice on how to design the userspace
>     interface
>
> NOTE: During testing it turned out that the touchpad_toggle sysfs
> attribute does not work. The reason for this is unknown, as the driver
> emulates the behaviour of the OEM application just fine. I suspect
> that this feature only controls some obscure key combination we dont
> know about, so i decided to send out this series regardless.

When testing those patches on your device, could you (Werner) also check
if the keyboard-related sysfs attributes accept "0" and "1" and also contain
"0" and "1" depending on the state of the associated functions?

Thanks,
Armin Wolf

> Changes since v3:
> - Add support for UNIWILL_OSD_SUPER_KEY_LOCK_CHANGED event
> - rename sysfs files to prepare for future changes
> - use kstrtobool() for handling sysfs input
> - add proper led locking
>
> Changed since v2:
> - Use the INOU0000 ACPI device for talking to the EC as it is much
>    faster than the WMI interface used before. Additionally the OEM
>    application also uses this ACPI inteface through a special driver.
> - Merge the uniwill-wmi driver into the uniwill-laptop driver as
>    the WMI driver should only load when matching the DMI whitelist.
> - Various small fixes
>
> Changes since v1:
> - spelling fixes
> - add missing error handling when reading PWM duty cycle
> - fix error when setting the super key lock sysfs attribute
>
> Changes since the RFC series:
> - spelling fixes
> - mention the INOU0000 ACPI device inside thew documentation
> - use MILLIDEGREE_PER_DEGREE instead of 1000
> - use power_supply_get_property_direct() to prevent deadlock
> - add support for KEY_KBDILLUMDOWN and KEY_KBDILLUMUP
>
> Armin Wolf (2):
>    platform/x86: Add Uniwill laptop driver
>    Documentation: laptops: Add documentation for uniwill laptops
>
>   .../ABI/testing/sysfs-driver-uniwill-laptop   |   53 +
>   Documentation/admin-guide/laptops/index.rst   |    1 +
>   .../admin-guide/laptops/uniwill-laptop.rst    |   60 +
>   Documentation/wmi/devices/uniwill-laptop.rst  |  198 +++
>   MAINTAINERS                                   |   11 +
>   drivers/platform/x86/Kconfig                  |    2 +
>   drivers/platform/x86/Makefile                 |    3 +
>   drivers/platform/x86/uniwill/Kconfig          |   38 +
>   drivers/platform/x86/uniwill/Makefile         |    8 +
>   drivers/platform/x86/uniwill/uniwill-acpi.c   | 1547 +++++++++++++++++
>   drivers/platform/x86/uniwill/uniwill-wmi.c    |   92 +
>   drivers/platform/x86/uniwill/uniwill-wmi.h    |  127 ++
>   12 files changed, 2140 insertions(+)
>   create mode 100644 Documentation/ABI/testing/sysfs-driver-uniwill-laptop
>   create mode 100644 Documentation/admin-guide/laptops/uniwill-laptop.rst
>   create mode 100644 Documentation/wmi/devices/uniwill-laptop.rst
>   create mode 100644 drivers/platform/x86/uniwill/Kconfig
>   create mode 100644 drivers/platform/x86/uniwill/Makefile
>   create mode 100644 drivers/platform/x86/uniwill/uniwill-acpi.c
>   create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.c
>   create mode 100644 drivers/platform/x86/uniwill/uniwill-wmi.h
>