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

Armin Wolf
2025-10-05T19:21:10Z

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 v4:
- add Tested-by tag
- fix usage of guard() inside switch statement

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 | 1549 +++++++++++++++++
drivers/platform/x86/uniwill/uniwill-wmi.c | 92 +
drivers/platform/x86/uniwill/uniwill-wmi.h | 127 ++
12 files changed, 2142 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