Unable to change brightness on Lenovo thinkpad P1 Gen 5

Config:
Nvidia Driver Version : 525.60.11
OS: Arch linux
linux kernel: 6.0.12
Graphics mode : Discrete

Hi,
I’m unable to change brightness on my laptop when the graphics is in Discrete mode, i manually tried to change value in /sys/class/backlight/nvidia_0/brightness file, but did not make a difference. I have added nvidia.NVreg_EnableBacklightHandler=1 to my kenel params, but even that did not do any difference. Please help me out.

Please check for a bios update.
Please check if setting kernel parameter
nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1
enables backlight control.

This did not change much.
But i observed one thing, i’m able to change the brightness after a S3 suspend and resume. The behavior is the same with or without the kernel parameter you suggested.
So for me to able to change the brightness after restart of the system i need suspend/resume once , after which it starts working. Weird bug.

2 Likes

I have the same problem with version 525.105.17. The brightness keys don’t work at all until I suspend and resume and then they sort of work. They work except when I approach the boundaries. When it’s approaching max brightness, the actual brightness drops to about 70% and when it approaches what is supposed to be the dimmest, brightness shoots up to 100%.

@rich.ayotte @vinod272, I believe the brightness controls are working for me on my p1 gen5. I’m running Hyprland WM on SDDM on a 6.3.3-arch1-1 kernel booted with the following parameters:

quiet loglevel=3 nosplash fbcon=nodefer nvidia_drm.modeset=1

and the nvidia-dkms version 530.41.03-1.

I think the first thing to chech is that the virtual files in /sys/class/backlight/nvidia_0/* work. My understanding from reading the /usr/share/doc/nvidia/README installed by the driver package is that:

o When available, the NVIDIA driver installs a backlight handler that
allows access to the driver’s backlight controller through
/sys/class/backlight/nvidia_0. This option can be disabled by passing the

 NVreg_EnableBacklightHandler=0
 
 parameter to the nvidia kernel module.

So, the /sys/class interface is automatically presented if/when the hardware is discovered. You shouldn’t need to set that to 1.

Indeed, in my case, the hardware is discovered, and the driver presents the interface:

/sys/class/backlight/nvidia_0/
β”œβ”€β”€ actual_brightness
β”œβ”€β”€ bl_power
β”œβ”€β”€ brightness
β”œβ”€β”€ device -> ../../../0000:01:00.0
β”œβ”€β”€ max_brightness
β”œβ”€β”€ power
β”‚   β”œβ”€β”€ autosuspend_delay_ms
β”‚   β”œβ”€β”€ control
β”‚   β”œβ”€β”€ runtime_active_time
β”‚   β”œβ”€β”€ runtime_status
β”‚   └── runtime_suspended_time
β”œβ”€β”€ scale
β”œβ”€β”€ subsystem -> ../../../../../../class/backlight
β”œβ”€β”€ type
└── uevent

AND I can peek and poke at the files (as described here, and in fact everything works, HOWEVER, max_brightness is WRONG, for me it’s reported as 100, however I can only set brightness between 1 and 10. It appears to apply modulo 10 math when setting brightness higher than 10, so setting it to 1, 11, 21… have identical effect (min bright)…