Laptop backlight control regression with 465.24.02

Sidenote, EnableBacklightHandler is not a RegistryDword but an own setting, so the correct kernel parameter would be

nvidia.NVreg_EnableBacklightHandler=0

or as modeprobe config
options nvidia NVreg_EnableBacklightHandler=0

At least this setting is also in the manual.

That’s exactly what I’ve written in this post.

There used to be such an option to the nvidia module, and it’s still documented as such, but the option was removed a while ago without modifying the documentation. Passing it will just do nothing now, other than issue a warning about an unknown option.

Due to this, I reimplemented the option local to nvidia-modeset (which registers the custom backlight handler) and stubbed out the functions if 0 is passed, which lead to no nvidia backlight node being created, but didn’t change the fact that changing the brightness of the apci_video0 node doesn’t have any effect either.

2 Likes

I had been having this problem as well, and upgrading the kernel to 5.16 (on Arch Linux) with the Nvidia 495.46 driver has resolved the problem for me.

2 Likes

Just updated the kernel? Or did you make some other changes to the Xorg file? More details, please.
And what kernel are you using, ZEN?

I just updated the kernel and the nvidia package (as it is required to match the kernel version). I have no Xorg configuration files, it is all auto-detected. I am using the stock linux kernel package on Arch, no ZEN.

can you please elaborate what system you have and if you’re sure the nvidia driver is in use.
I’ve installed the latest kernel (5.16.1-051601-generic) using mainline application together with the latest nvidia beta driver (510.39.01) and there is still no backlight control.

I’m using xubuntu 21.10
inxi -SGc
System: Host: lenovo Kernel: 5.16.1-051601-generic x86_64 bits: 64 Desktop: Xfce 4.16.0 Distro: Ubuntu 21.10 (Impish Indri)
Graphics: Device-1: NVIDIA TU117GLM [Quadro T2000 Mobile / Max-Q] driver: nvidia v: 510.39.01
Device-2: IMC Networks Integrated Camera type: USB driver: uvcvideo
Display: x11 server: X.Org 1.20.13 driver: loaded: nvidia resolution: 3840x2160~60Hz
OpenGL: renderer: Quadro T2000/PCIe/SSE2 v: 4.6.0 NVIDIA 510.39.01

The nvidia driver (460.91.03) and the xubuntu supplied nouveau driver are the only drivers supporting backlight control.

I’m using Arch Linux, with kernel 5.16.1 using the Nvidia 495.46 drivers. Nouveau is not installed on my system.

Do you have a nvidia_wmi_ec_backlight module loaded? That seems to be the key to getting it to work for the new kernel.

the module “nvidia_wmi_ec_backlight” was not loaded, but after configure the module in “/etc/modules” and reboot, i see that the module is loaded by using “lsmod” but still no backlight control. Do i have to configure something else ?

The nvidia_wmi_ec_backlight module (previously called wmaa-backlight-wmi on older kernel versions) is only useful for users with hybrid graphics (at least that’s what the module help text suggests).

Curiously, the Lenovo P17 Gen 1 seems to support hybrid setups, so you might be in luck. Try changing the mode in the UEFI settings: press F1 while booting up, go to Config > Display > Graphic Devices and switch the mode to Hybrid if it’s set to Discrete.

This might change the mux to switch to the Intel graphics card as the primary framebuffer device and make things like the nvidia_wmi_ec_backlight module work.

Looks like non-hybrid, purely discrete graphics users are still out of luck. I will probably try 510.39.01 at a later time, but don’t have too much hope.

I am using a Legion 5 Pro, came with AMD + Nvidia GPU.

Tried loading module as suggested and use discrete GPU with no luck

$ lsmod | grep nvidia
nvidia_wmi_ec_backlight    16384  0
nvidia_uvm           2576384  0
nvidia_drm             73728  7
nvidia_modeset       1155072  18 nvidia_drm
nvidia              36974592  1002 nvidia_uvm,nvidia_modeset
wmi                    40960  3 nvidia_wmi_ec_backlight,wmi_bmof,ideapad_laptop

This is packages I installed

pacman -Qm | grep nvidia
lib32-nvidia-utils-tkg 495.46-195
lib32-opencl-nvidia-tkg 495.46-195
nvidia-egl-wayland-tkg 495.46-195
nvidia-settings-tkg 495.46-195
nvidia-tkg 495.46-195
nvidia-utils-tkg 495.46-195
opencl-nvidia-tkg 495.46-195

P/S: I am typing this with full brightness and having headache which probably will make me sick for the next few hours. Downgrading nvidia…

see post #28 how to change the brightness if backlight control is not working, that’s what I’m using currently to lower the screen brightness.

use “xrandr” to see what output is connected.

I can confirm that this backlight brightness bug has been fixed at long last with the latest beta driver 510.39.01. Tested on up-to-date Arch Linux with beta driver 510.39.01 from AUR repository on Lenovo Legion 5 Pro 16ACH6H (AMD) laptop with RTX 3070 card in discrete mode, of course.
There was no need for any module parameters. The only bug remaining is that the backlight does not get restored at new boot, so a custom systemd unit and a local script are still needed.
The fix below has also been successully tested on the same machine, running Debian GNU/Linux 11 (bullseye) which comes with 460.91.03 (unaffected) version of NVIDIA driver. The only difference is that the custom script “save-nvidia-brightness.sh” was saved to /etc/init.d folder which is present on said Debian release.

sudo nano /usr/local/bin/save-nvidia-brightness.sh

#!/bin/bash
# Saves nvidia brightness settings on reboot/shutdown
cat /sys/class/backlight/nvidia_0/actual_brightness | /usr/lib/systemd/systemd-backlight save backlight:nvidia_0

sudo chmod +x /usr/local/bin/save-nvidia-brightness.sh

sudo nano /lib/systemd/system/save-nvidia-brightness.service

[Unit]
Description=Save nvidia brightness
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/save-nvidia-brightness.sh

[Install]
WantedBy=halt.target reboot.target shutdown.target

systemctl enable save-nvidia-brightness

After adjusting brightness level to your liking, check by rebooting your machine and verifing that the brightness level has been restored.

Reference:
http://dalvikplanet.blogspot.com/2019/08/save-current-screen-brightness-before.html

Thank you! I am using the very same laptop and can confirm 510.39.01 fixed this issue. EnableBrightnessControl=1 is not needed as well.

I got a solution for my device: Putting i915 into /etc/initramfs-tools/modules and run sudo update-initramfs -u fixes the issue.

Ubuntu only ofc. But other distros should have similar ways to add a module to initramfs for early kms.

Found an alernative maybe better solution for my situation:

Create a file /etc/modprobe.d/random-name-here.conf with content:

softdep nvidia pre: i915

Making sure that the intel driver gets initialized before the nvidia driver. (Also establishes a dependency relation as a sideeffect so should not be set on amd devices)

I confirm that the brightness issue has been solved by installing nvidia-driver-510 from https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa for my Lenovo Legion Y7 laptop, known as Y9000K in mainland China.

However, the problem where the sound disappears when waking up from suspension is still present.
System:
Host: jizong-Legion Kernel: 5.16.4-051604-generic x86_64 bits: 64
Desktop: GNOME 40.5 Distro: Ubuntu 21.10 (Impish Indri)
Graphics:
Device-1: NVIDIA GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
driver: nvidia v: 510.47.03
Device-2: Acer Integrated Camera type: USB driver: uvcvideo
Display: x11 server: X.Org 1.20.13 driver: loaded: nvidia
unloaded: fbdev,modesetting,nouveau,vesa resolution: 1: 3840x2160~60Hz
2: 4096x2560
OpenGL: renderer: NVIDIA GeForce RTX 3080 Laptop GPU/PCIe/SSE2
v: 4.6.0 NVIDIA 510.47.03

Hello everyone. Found a solution in the form of a GNOME extension!

https://extensions.gnome.org/extension/1625/soft-brightness/
My hardware is
RAM 31.3 GiB
ASUSTeK COMPUTER INC. G752VSK
Intel® Core™ i7-7700HQ CPU @ 2.80GHz × 8 ( no
intel graphics)
NVIDIA GeForce GTX 1070/PCIe/SSE2
inxi -G youswer@no1
Graphics:
Device-1: NVIDIA GP104BM [GeForce GTX 1070 Mobile] driver: nvidia
v:510.47.03
Device-2: 04081-0009510016501004991 USB2.0 HD UVC WebCam type: USB
driver: uvcvideo
Display: x11 server: X.org 1.21.1.3 driver: loaded: nvidia
resolution: <missing: xdpyinfo>
OpenGL: renderer: NVIDIA GeForce GTX 1070/PCIe/SSE2
v:4.6.0 NVIDIA 510.47.03

               -`youswer@no1
              .o+`-----------
             `ooo/ OS: Arch Linux x86_64
            `+oooo: Host: G752VSK 1.0
           `+oooooo: Kernel: 5.16.5-zen1-1-zen
           -+oooooo+: Uptime: 20 hours, 19 mins
         `/:-:++oooo+: Packages: 855 (pacman)
        `/++++/++++++++: Shell: zsh 5.8
       `/++++++++++++++: Resolution: 1920x1080
      `/+++ooooooooooooo/` DE: GNOME 41.3
     ./ooosssso++osssssso+` WM: Mutter
    .oossssso-````/ossssss+` WM Theme: Mojave-dark-alt
   -osssssso. :sssssso. Theme: Mojave-dark-alt [GTK2/3]
  :osssssss/ osssso+++. Icons: Colloid-dark [GTK2/3]
 /ossssssss/ +ssssooo/- Terminal: gnome-terminal

/ossssso+/:- -:/+osssso+- CPU: Intel i7-7700HQ (8) @ 3.800GHz +sso+:- .-/+oso: GPU: NVIDIA GeForce GTX 1070 Mobile
++:. -/+/ Memory: 2037MiB / 32055MiB

ls /sys/class/backlight/ youswer@no1
nvidia_0
No difference.
~ » ls /sys/class/backlight/ youswer@no1
acpi_video0

Works fine! And no needed options in Xorg.conf : “RegistryDwords” “EnableBrightnessControl=1”
and more.

That extension may be useful in the future, but now I can also confirm, that driver 510 works fine with my computer.

1 Like

Without this extension my laptop can’t adjust the brightness.
What I just didn’t do.

How do you actually change the brightness on your device?

Until driver 495 I would simply use echo 80 > sudo tee /sys/class/backlight/nvidia_0/brightness along with nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1 in my kernel parameters, but after updating to driver 510, I can no longer change the brightness, even after removing the kernel param. Any tips?

Device is Legion 7 16ACHg6.

Output of lsmod:

nvidia_drm             73728  9
nvidia_uvm           2625536  0
nvidia_modeset       1163264  16 nvidia_drm
nvidia              39129088  785 nvidia_uvm,nvidia_modeset
nvidia_wmi_ec_backlight    16384  0
wmi                    40960  3 nvidia_wmi_ec_backlight,wmi_bmof,ideapad_laptop

Output of dmesg:

sudo dmesg | grep nvidia
[sudo] password for nick:
[    1.535952] nvidia: module license 'NVIDIA' taints kernel.
[    1.559884] nvidia-nvlink: Nvlink Core is being initialized, major device number 511
[    1.573026] nvidia 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[    1.674936] nvidia_uvm: module uses symbols from proprietary module nvidia, inheriting taint.
[    1.675305] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  510.47.03  Mon Jan 24 22:51:43 UTC 2022
[    1.682014] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
[    1.682016] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0
[    1.692043] nvidia-uvm: Loaded the UVM driver, major device number 508.