The seven modules
Each is a self-contained folder with a manifest, a payload, and a
README. Click any module to open the bug story and the file-level
details.
| Module | Version | Fixes |
touchpad-fix |
1.1.1 |
PixArt 093A:4F05 haptic pad — pressure-axis quirk + libinput override |
audio-fix |
2.1.0 |
Cirrus CS35L56 firmware + HiFi UCM (upstream in alsa-ucm-conf 1.2.16) + SSP2-BT noise fix |
wifi-fix |
2.0.0 |
BE211: disable broken 802.11be/EHT — deliberate Wi-Fi 7 → stable Wi-Fi 6 (HE) downgrade |
display-fix |
1.1.2 |
xe driver Panel Replay / PSR lockup — kernel cmdline disable |
intel-perf-fix |
1.1.0 |
Panther Lake idle/thermal — thermald + intel-lpmd |
webcam-ai-fix |
1.1.0 |
AI camera stack — OBS + obs-backgroundremoval + v4l2loopback (CPU-only on Linux) |
keyboard-backlight-fix |
1.1.0 |
(optional) BIOS SLKB ACPI bug — asusd restores software/KDE backlight control (Fn hotkeys already work) |
Module deep dives
touchpad-fix — pressure axis mis-parsed by hid-multitouch
The kernel's HID descriptor parser inflates ABS_MT_PRESSURE max to
2601 — literally the Y-axis max value, suggesting a parser typo
— for this PixArt haptic touchpad. Real hardware values top out around 1000.
libinput's pressure thresholds are calibrated against the kernel-reported max,
so real touches register at 1–6% of the bogus max — well below the activation
threshold. Result: every motion is rejected as a "kernel bug: Touch jump."
$ sudo dmesg | grep "Touch jump" | wc -l
1873 ← without the module
0 ← with the module
Files installed:
/etc/udev/hwdb.d/61-pixart-4f05-pressure-fix.hwdb — clamps the pressure axes via EVDEV_ABS_18 / EVDEV_ABS_3A
/etc/libinput/local-overrides.quirks — tells libinput to ignore pressure entirely (AttrEventCode=-ABS_MT_PRESSURE;-ABS_PRESSURE)
audio-fix — three things stacked
- Cirrus CS35L56 amps boot in
FIRMWARE_MISSING because linux-firmware-cirrus < 20260519 doesn't ship per-OEM blobs for PCI subsystem 1043:15e4.
- The combined sidecar codec
cs35l56+cs42l43-spk has no UCM in alsa-ucm-conf < 1.2.16, and its SpeakerCodec regex drops the -spk suffix — so the UCM fails to open. (Fixed upstream in alsa-ucm-conf 1.2.16.)
- WirePlumber then falls back to
stereo-fallback, which plays to the Jack PCM, never the speaker output PCM.
$ sudo dmesg | grep cs35l56
cs35l56 sdw:0:2:01fa:3556:01:0: FIRMWARE_MISSING ← without
cs35l56 sdw:0:2:01fa:3556:01:1: FIRMWARE_MISSING ← without
─────────────────────────────────────────────────────────────────────────
cs35l56 sdw:0:2:01fa:3556:01:0: Calibration applied ← with
cs35l56 sdw:0:2:01fa:3556:01:0: Tuning PID: 0x23134, SID: 0x470200 ← with
Files installed (v2.1.0):
/lib/firmware/cirrus/cs35l56-b0-dsp1-misc-104315e4-l2u{0,1}.bin — per-OEM tuning blobs (fallback for linux-firmware-cirrus < 20260519)
/lib/firmware/cirrus/cs35l56-b0-dsp1-misc-104315e4-l2u{0,1}.wmfw — generic CS35L56 Rev 3.13.4 firmware patch (chip ROM upgrades 3.4.4 → 3.13.4)
/etc/wireplumber/wireplumber.conf.d/52-disable-bt-sco-offload.conf — silences the dead SSP2-BT offload PCM that spams the kernel log
- HiFi UCM — only on
alsa-ucm-conf < 1.2.16 (1.2.16+ ships it in the package): sof-soundwire.conf (fixed -spk regex), the cs35l56+cs42l43-spk / cs42l43-spk+cs35l56 speaker confs, and codecs/cs42l43-spk+cs35l56/init.conf
wifi-fix — 802.11be/EHT is broken on the BE211, so disable it
The core problem is 802.11be (EHT / Wi-Fi 7) itself on
the Intel BE211 (8086:e440) under
iwlwifi/iwlmld: the EHT RX path collapses to
MCS0 / NSS1 and MLO sessions tear down, so the "Wi-Fi 7"
link is slower and flakier than plain Wi-Fi 6. Not fixed upstream as of
Linux 7.1-rc7. Two secondary irritants pile on: iwlmld
defaults to power_scheme=2 (beacon-loss recovery churn),
and the iwlwifi TX-segmentation offload bug can throw
Microcode SW error freezes under heavy traffic.
$ sudo dmesg | grep -E "missed beacons|Microcode SW error" | wc -l
2046 ← with EHT on
0 ← with disable_11be=Y (Wi-Fi 6 fallback)
Core fix — drop the broken 802.11be layer so the radio
runs as rock-solid Wi-Fi 6 (HE). Same approach Omarchy ships; verified
at ~2.1 Gbit/s over 160 MHz 6 GHz HE here.
Files installed:
/etc/modprobe.d/iwlwifi-disable-eht.conf — options iwlwifi disable_11be=Y; disables EHT / Wi-Fi 7, link falls back to stable Wi-Fi 6 / HE
/etc/modprobe.d/iwlmld-active.conf — options iwlmld power_scheme=1 (secondary; trims HE-mode instability)
/etc/tmpfiles.d/pcie-aspm-performance.conf — global ASPM = performance at boot (secondary)
/etc/NetworkManager/dispatcher.d/90-iwlwifi-no-offload — ethtool -K $iface tso off gso off gro off on every iwlwifi up (secondary)
This is a deliberate Wi-Fi 7 → Wi-Fi 6 downgrade — EHT
is the problem on this silicon, and the secondary tunables do
not keep Wi-Fi 7 alive. Bluetooth coex
(bt_coex_active=Y) is left untouched, so Bluetooth keeps
working.
display-fix — xe driver Panel Replay handshake hangs
The Samsung Display Corp panel reports IEEE OUI 00:aa:01
in DPCD register 0x300 and supports Panel Replay Selective Update
(Early Transport). The xe driver's PSR idle wait times out on this
panel firmware:
xe 0000:00:02.0: [drm] *ERROR* Timed out waiting PSR idle state
xe 0000:00:02.0: [drm] *ERROR* [CRTC:151:pipe A] DSB 0 timed out waiting for idle
kwin_wayland: Pageflip timed out! This is a bug in the xe kernel driver
Once wedged, only a reboot recovers — modeset cycle, GPU reset, and
runtime PSR-disable via debugfs all fail to unstick the display
state buffer. Worse than a black panel: when the PSR2
selective-fetch path deadlocks the DSB during heavy
compositing (a screen capture is enough), it can take the whole
kernel down — a silent hard hang with no oops, no MCE,
empty pstore/BERT. Same pattern Intel addresses for Dell
XPS 14/16 in mainline (per-device disable in
intel_quirks.c) — our
upstream-patches/0001
ports the same disable to our subsystem ID.
There is no dedicated upstream tracker for this
Panther Lake PSR2 selective-fetch / DSB hang; it's reproduced locally
on linux-cachyos 7.0.11 and linux-cachyos-rc 7.1-rc7.
(drm/xe #7513 — "Lunar lake, rare shutdown under load" — is a
distinct Lunar Lake PMC-firmware bug that leaves a
BERT: [Hardware Error] record and is not
cured by disabling PSR, so it is not this one.)
Files installed:
/etc/modprobe.d/xe-disable-psr.conf — belt-and-suspenders for late module load
- (managed block)
/etc/default/limine — appends xe.enable_psr=0 xe.enable_psr2_sel_fetch=0 xe.enable_panel_replay=0 to kernel cmdline; the post-install hook calls limine-update
intel-perf-fix — Panther Lake hybrid topology tuning
Without a userspace thermal daemon, the kernel's only lever is "cap
CPU frequency". On Panther Lake's hybrid topology (P + E + LP-E
cores) a P/E-aware throttle is far smarter — it can park work on
slower cores instead of slowing everything down. Without
intel-lpmd, idle work spreads; with it, all idle work
concentrates on a single LP-E core and P-cores deep-sleep.
Packages installed (no payload files):
thermald (extra repo) — thermald.service enabled
intel-lpmd (extra / cachyos repo, plain pacman) — intel_lpmd.service enabled
Both daemons coexist with the existing power-profiles-daemon:
PPD handles user profile, thermald handles thermal, intel-lpmd handles
idle topology. Different layers, no conflict.
webcam-ai-fix — Linux equivalent of Windows Studio Effects
Windows Studio Effects on Copilot+ PCs runs background blur, smart
framing, eye-contact correction, and voice focus on the NPU. None
of these are shipped on Linux out of the box, even though the
Intel Panther Lake NPU itself is fully supported by the kernel
(intel_vpu driver, /dev/accel/accel0 exposed)
and the userspace stack (OpenVINO 2026, level-zero) is available via
the AUR.
This module bundles the userspace plumbing: a virtual camera
target via v4l2loopback, OBS Studio as the capture +
filter pipeline, and the obs-backgroundremoval
plugin which runs ONNX models. On Linux that plugin is
CPU-only — its execution providers are
CUDA / ROCm / MIGraphX, and there is no OpenVINO/NPU path
in the OBS plugin (installing openvino does not add an
"NPU" device). CPU is fine for 720p30 background blur.
Files installed:
/etc/modules-load.d/v4l2loopback.conf — auto-load at boot
/etc/modprobe.d/v4l2loopback-options.conf — devices=1 video_nr=10 card_label='AI Camera' exclusive_caps=1
Packages installed:
v4l2loopback-dkms (extra) — kernel module
obs-studio (extra) — orchestrator
obs-backgroundremoval (AUR) — ML segmentation plugin (ONNX); CPU-only on Linux
Use: open OBS, add a Video Capture Device source pointing at the
real webcam, attach the Background Removal filter, and start
the virtual camera (Tools → Start Virtual Camera). Apps then see
"AI Camera" as a webcam choice.
Reality check — no NPU offload in OBS on Linux. For an
actual NPU route see
ericjchang/linux-studio-effects
(OpenVINO + v4l2loopback), but it's validated on Arrow Lake,
not yet Panther Lake, and installs via git + pip.
keyboard-backlight-fix — (optional) BIOS SLKB bug breaks software backlight control
The backlight is not dead — the Fn hotkeys
toggle it fine (handled by the EC in hardware, bypassing the buggy ACPI
path). This module is optional: it only restores
software control (the KDE slider / brightnessctl /
sysfs).
On BIOS B9406CAA.304, the SLKB ACPI method
that sets keyboard-backlight brightness has a broken branch.
Disassembled from the live DSDT:
Method (SLKB, 1, NotSerialized) {
If ((Arg0 >= 0x0100) && (Arg0 <= 0x0106)) { Local0 = (Arg0 - 0x0100) }
ElseIf((Arg0 >= 0x80) && (Arg0 <= 0x83)) { Local0 = (Arg0 - 0x80) * 0x21 ... }
ElseIf((Arg0 >= Zero) && (Arg0 <= 0x03)) { Local0 = Zero } // ← BUG
STBC (Zero, Local0)
Return (One)
}
The mainline asus-wmi Linux driver writes the standard
kernel range 0..3 to set keyboard brightness. That hits
the third branch which unconditionally clamps
Local0 to zero. So every software write
— KDE / brightnessctl / direct
/sys/class/leds/ — is silently turned into "set brightness
0" and no-ops. (The Fn hotkeys are unaffected; they go through the EC,
not this method.) The OEM-tested 0x100..0x103 range works
correctly.
Workaround: the userspace daemon asusd
(shipped in asusctl) translates standard kernel-level
brightness writes into the OEM range before invoking ACPI,
side-stepping the buggy branch. Once asusd is running,
KDE PowerDevil's keyboard-brightness control reaches the EC
correctly.
Files installed:
/usr/share/dbus-1/system-services/xyz.ljones.Asusd.service — D-Bus activation entry that ASUS doesn't ship; without it asusd.service (Type=dbus) never auto-starts
/etc/modules-load.d/acpi_call.conf — auto-load acpi_call for any direct ACPI fallback debugging
/etc/asusd/ directory — asusd refuses to start without it; pacman package leaves it absent
Packages installed:
asusctl (extra) — provides the asusd daemon
acpi_call-dkms (AUR, manual) — kernel module for direct ACPI invocations during debugging
If a future ASUS BIOS revision fixes the SLKB branch,
this entire module becomes redundant — uninstall it.