You are not logged in.
Hi,
I’m having trouble with backlight control on a Lenovo Legion S7 15ACH6: the backlight interfaces under /sys/class/backlight are present and writable, but changing their brightness values does not actually change the panel brightness.
Hardware / software
- Laptop: Lenovo Legion S7 15ACH6 (15.6" 2560x1440 165 Hz internal panel)
- CPU: AMD Ryzen 7 5800H
- dGPU: NVIDIA GeForce RTX 3050 Ti Mobile / Max-Q
- iGPU: AMD Cezanne [Radeon Vega Series / Radeon Mobile Series] (internal panel is driven by the iGPU)
- Distro: Arch Linux
- Kernel: 6.12.60-1-lts
- WM/compositor: Hyprland 0.52.2 (Wayland, started via SDDM)
- NVIDIA driver: 580.105.08 (proprietary)
`inxi -Gazy`:
Graphics:
Device-1: NVIDIA GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] vendor: Lenovo
driver: nvidia v: 580.105.08 alternate: nouveau,nvidia_drm
non-free: 550-580.xx+ status: current (as of 2025-11; EOL~2026-12-xx)
arch: Ampere code: GAxxx process: TSMC n7 (7nm) built: 2020-2023 pcie:
gen: 3 speed: 8 GT/s lanes: 8 link-max: gen: 4 speed: 16 GT/s lanes: 16
ports: active: none empty: DP-1,DP-2,eDP-1 bus-ID: 01:00.0
chip-ID: 10de:2563 class-ID: 0300
Device-2: Advanced Micro Devices [AMD/ATI] Cezanne [Radeon Vega Series /
Radeon Mobile Series] vendor: Lenovo driver: amdgpu v: kernel arch: GCN-5
code: Vega process: GF 14nm built: 2017-20 pcie: gen: 3 speed: 8 GT/s
lanes: 16 ports: active: eDP-2 empty: DP-3,DP-4 bus-ID: 06:00.0
chip-ID: 1002:1638 class-ID: 0300 temp: 61.0 C
Device-3: Syntek Integrated Camera driver: uvcvideo type: USB rev: 2.0
speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 3-3:2 chip-ID: 174f:2435
class-ID: 0e02
Display: wayland server: X.org v: 1.21.1.21 with: Xwayland v: 24.1.9
compositor: Hyprland v: 0.52.2 driver: X: loaded: modesetting,nvidia
alternate: fbdev,nouveau,nv,vesa dri: radeonsi gpu: amdgpu display-ID: 1
Monitor-1: eDP-2 model: BOE Display 0x0a2d built: 2021 res: mode: 2560x1440
hz: 165 scale: 100% (1) dpi: 189 gamma: 1.2 size: 344x194mm (13.54x7.64")
diag: 395mm (15.5") ratio: 16:9 modes: max: 2560x1440 min: 640x480
API: EGL Message: EGL data requires eglinfo. Check --recommends.
Info: Tools: de: kscreen-doctor gpu: nvidia-settings,nvidia-smi
wl: nwg-displays,wlr-randr x11: xprop,xrandr
Current kernel command line:
BOOT_IMAGE=/boot/vmlinuz-linux-lts root=UUID=78e9ed06-98e4-4e5f-9c0d-10102e38a118 rw loglevel=3 quiet nvidia-drm.modeset=1 nvidia_drm.fbdev=1 acpi_backlight=video amdgpu.backlight=
Backlight interfaces and manual tests
`/sys/class/backlight` shows two ACPI video devices:
$ ls -l /sys/class/backlight
lrwxrwxrwx 1 root root 0 Dec 5 14:24 acpi_video0 -> ../../devices/pci0000:00/0000:00:01.1/0000:01:00.0/backlight/acpi_video0
lrwxrwxrwx 1 root root 0 Dec 5 14:24 acpi_video1 -> ../../devices/pci0000:00/0000:00:08.1/0000:06:00.0/backlight/acpi_video1
Their brightness ranges are:
$ for d in /sys/class/backlight/*; do
echo "== $d =="
cat "$d/brightness"
cat "$d/max_brightness"
echo
done
== /sys/class/backlight/acpi_video0 ==
17
100
== /sys/class/backlight/acpi_video1 ==
17
49
If I change these values manually via sysfs, the numbers update correctly but the panel brightness does not change at all:
# acpi_video0
echo 1 | sudo tee /sys/class/backlight/acpi_video0/brightness
echo 50 | sudo tee /sys/class/backlight/acpi_video0/brightness
echo 17 | sudo tee /sys/class/backlight/acpi_video0/brightness
# acpi_video1
echo 1 | sudo tee /sys/class/backlight/acpi_video1/brightness
echo 24 | sudo tee /sys/class/backlight/acpi_video1/brightness
echo 17 | sudo tee /sys/class/backlight/acpi_video1/brightness
In all of these cases, the physical screen brightness stays exactly the same. Desktop brightness controls / hotkeys (which use these interfaces under the hood) behave the same way: they can write to `/sys/class/backlight/acpi_video*/brightness`, but there is no visible effect on the internal panel.
So, in short:
- `/sys/class/backlight/acpi_video0` and `acpi_video1` exist and are writable.
- `brightness` and `max_brightness` values change as expected when I write to them.
- But the actual panel brightness never changes.
What I have tried
- Tried booting with different kernel parameters in `GRUB_CMDLINE_LINUX_DEFAULT` such as:
- `acpi_backlight=native`
- `amdgpu.abmlevel=0`
- `amdgpu.dcdebugmask=0x40010`
(I also use `nvidia_drm.modeset=1 nvidia_drm.fbdev=1` for PRIME offload, but the display itself is on the iGPU.)
- Disabled any adaptive brightness options in Windows and in UEFI/BIOS.
Thanks in advance for any suggestions on how to get a working backlight interface for this panels. This is the last big annoyance on this machine; otherwise everything works great.
Last edited by notsuperganang (2025-12-23 08:45:33)
Offline
For anyone experiencing similar issues with brightness control on this laptop model, the solution is straightforward:
The nvidia_wmi_ec_backlight module is already present in the kernel since 5.16+, but requires the correct kernel parameter to function.
Solution:
Edit /etc/default/grub and modify GRUB_CMDLINE_LINUX_DEFAULT to include:
acpi_backlight=nvidia_wmi_ec
Remove any conflicting parameters such as acpi_backlight=video or amdgpu.backlight=0, then regenerate grub config and reboot:
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo reboot
After reboot, the nvidia_wmi_ec_backlight interface will be active and brightness control works properly without any adaptive brightness issues.
Verified working on:
- Kernel: 6.12.63-1-lts
- Hardware: Legion Slim 7 15ACH6 (AMD Ryzen 7 5800H + RTX 3050 Ti)
- BIOS mode: Hybrid Graphics (Dynamic)
The key insight is that this laptop requires the nvidia_wmi_ec backlight interface rather than acpi_video or amdgpu_bl interfaces, which do not function correctly on this hardware due to EC-controlled backlight implementation.
Last edited by notsuperganang (2025-12-23 08:45:48)
Offline