Note
Deprecation in near future, in favor of Tuxedo Computers Drivers and Clevo driver patch+main tuxedo fork What are still missing on those:
- Battery
- Fan readings and state
Will contrib soon!
DCHU is a kernel-space devices that integrates:
- dchu_core: Contact with ACPI device
CLV0001aka DCHU - dchu_hwmon: hwmon child exposing fans, PWM duty, and temps via the FAN package
- dchu_leds: LED child controlling keyboard backlight levels (0–5), RGB is not planned for support since there is no test device
Features are replicated from Gigabyte's "Control Center" (CC not GCC) - ControlCenter_3.55
Tested on Gigabyte U4 UD, which on latest upstream doesn't have suitable fan drivers
- BatteryUtility
- CC3.0 (pretty much hobo)
- CPU_OC
- EnergySave
- FanSpeedSettings
- FlexiKey
- FnKey (todo)
- GPUOverclocking
- Keyboard
- Linux kernel headers
- Firmware implementing DCHU
\_DSMwith UUIDE4 24 F2 93 DC FB BF 4B AD D6 DB 71 BD C0 AF AD
- Build all modules:
make modules_all
- Or explicitly:
make modules MODULES="dchu_core dchu_hwmon dchu_leds"
- Point
KDIRat your kernel build tree (must havemake modules_preparerun):make modules_all KDIR=/path/to/linux/build- Example: if you built with
O=/path/to/build, use thatOdir asKDIR.
- Package build:
makepkg -f(producesinsyde-dchu-dkms-<ver>-x86_64.pkg.tar.zst)
- Install the DKMS package:
sudo pacman -U insyde-dchu-dkms-*.pkg.tar.zst
- DKMS will auto-build for installed kernels and on updates.
- Manual DKMS (optional):
sudo dkms add -m insyde-dchu-dkms -v 0.1.0sudo dkms build -m insyde-dchu-dkms -v 0.1.0sudo dkms install -m insyde-dchu-dkms -v 0.1.0
- Preferred: install/symlink your kernel headers to
/lib/modules/<release>/build, then:sudo dkms build -m insyde-dchu-dkms -v 0.1.0 -k <release>
- Advanced (enabled in dkms.conf): pass
KDIRto override the kernel dir DKMS uses:sudo KDIR=/path/to/linux/build dkms build -m insyde-dchu-dkms -v 0.1.0 -k <release>- Ensure
<release>matches the kernel built inKDIR(ABI match).
- Load in order (hwmon params optional):
sudo insmod ./dchu_core.kosudo insmod ./dchu_hwmon.ko invert=1 tach_hz=35940 ppr=1 le=1sudo insmod ./dchu_leds.ko
- Or:
make load_all PARAMS="invert=1 tach_hz=35940 ppr=1 le=1"
- Unload:
sudo rmmod dchu_hwmon dchu_leds dchu_core- Or
make unload_all
- Sysfs:
/sys/class/hwmon/hwmonX/withname=dchu - Exposed attributes:
- Fans (RPM):
fan1_input(CPU),fan2_input(GPU1),fan3_input(GPU2) - PWM (0–255):
pwm1,pwm2,pwm3(scaled from 0–100 duty; clamped ≤255) - Temps (m°C):
temp1_input(CPU remote),temp2_input(GPU1),temp3_input(GPU2)
- Fans (RPM):
- Debug:
fan_buf(hex dump of FAN package 12) - Fan controls:
fan_mode(RW): accepts numeric (0/1/3/5/6/7) or names (auto, max, silent, maxq, custom, turbo). Write invokes_DSMcommand121with a 4-byte payload:payload[0]=mode,payload[1]=0,payload[2]=0,payload[3]=1(subcommand).fan_mode_name(RO): the name of the last set mode.
- Parse table (FAN package id = 12):
- CPU RPM:
(buf[2] << 8) | buf[3] - GPU1 RPM:
(buf[4] << 8) | buf[5] - GPU2 RPM:
(buf[6] << 8) | buf[7] - CPU duty:
buf[16](0–100) - GPU1 duty:
buf[19](0–100) - GPU2 duty:
buf[22](0–100) - CPU remote:
buf[18](°C) - GPU1 remote:
buf[21](°C) - GPU2 remote:
buf[24](°C)
- CPU RPM:
- LED:
/sys/class/leds/dchu::kbd_backlight(max_brightness = 5) - Read:
_DSMfunction61returns an integer; low byte is brightness0..5 - Write:
_DSMfunction39with 4-byte payload,payload[0]=level (0..5), others0 - Helpers on platform device (debug):
.../dchu-leds.0/raw_status→ prints_DSM 61result or error.../dchu-leds.0/raw_set→ write a number to invoke_DSM 39