3

I have a Lenovo Legion 7 16ACHg6 (2021) which was only released recently. It has AMD 5800H with NVIDIA RTX 3060 GPU. One of the issues I found is that backlight brightness control is not working. I.e. the shortcut keyboard buttons bring up the brightness control widget, and the brightness value in that widget does get adjusted, so I guess the keyboard shortcuts/buttons are ok. But the backlight is not controlled. When I try to control the backlight through sysfs, I find a nvidia folder and achoing into the actual_brightness file adjusts that value but nothing happens.

I've setup the BIOS to use DISCRETE GRAPHICS. I've tried using both proprietary and open-source (Nouveau) drivers, but no luck. I've tried with installing newer drivers from NVIDIA (version 465 downloaded from their site), but that didn't help. I've tried running the mainline tool to update to the 5.12 kernel but that didn't help either. I've also tried the suggestion of adding Option "RegistryDwords" "EnableBrightnessControl=1" to the xorg config but without success. I've tried with acpi_backlight=vendor kernel arg, in this case adjusting the brightness completely turns off the display and I need to reboot to get it back. Setting the amdgpu.brightness=0 kernel arg has no impact. I've messed with different live-cd's (Fedora 34, Garuda, Ubuntu 20.04 LTS) but it was not working with any of them. On Windows obviously it is working.

Using xrandr works, but that doesn't however really control the brightness of the backlight.

At this point I've ran out of options that I could find around on the internet. I guess deeper analyses needs to be done. However I have no clue where to start. My first though is that brightness is controlled through a PWM signal. On embedded ARM devices their is mostly a dedicated SOC pin for that, but I'm not sure how this goes on x86. Is the AMD cpu able to do that directly? Is it under control of the GPU? Is there some sort of in-between display controller that get's controlled through I2C?

EDIT: I've added some key parts of the output of dmesg:

[    0.000000] Linux version 5.12.1-051201-generic (kernel@gloin) (gcc (Ubuntu 10.3.0-1ubuntu1) 10.3.0, GNU ld (GNU Binutils for Ubuntu) 2.36.1) #202105021030 SMP Sun May 2 10:34:08 UTC 2021
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.12.1-051201-generic root=UUID=99416551-f8bc-413e-a118-d9c4845e7fa6 ro quiet splash vt.handoff=7
...
[    0.000000] efi: EFI v2.70 by INSYDE Corp.
[    0.000000] efi: ACPI=0xceffe000 ACPI 2.0=0xceffe014 TPMFinalLog=0xcef3f000 SMBIOS=0xcc70a000 SMBIOS 3.0=0xcc708000 MEMATTR=0xb65fc018 ESRT=0xb65e8418 MOKvar=0xcc6d0000 RNG=0xcc705d18 TPMEventLog=0xb652c018 
[    0.000000] efi: seeding entropy pool
[    0.000000] random: fast init done
[    0.000000] SMBIOS 3.3.0 present.
[    0.000000] DMI: LENOVO 82N6/LNVNB161216, BIOS GKCN24WW 02/03/2021
[    0.000000] tsc: Fast TSC calibration using PIT
[    0.000000] tsc: Detected 3193.968 MHz processor
...
[    0.311851] ACPI: EC: interrupt unblocked
[    0.311852] ACPI: EC: event unblocked
[    0.313133] ACPI: EC: EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    0.313133] ACPI: EC: GPE=0x3
[    0.313133] ACPI: \_SB_.PCI0.LPC0.EC0_: Boot DSDT EC initialization complete
[    0.313133] ACPI: \_SB_.PCI0.LPC0.EC0_: EC: Used to handle transactions and events
[    0.313169] iommu: Default domain type: Translated 
[    0.313169] pci 0000:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[    0.313169] pci 0000:01:00.0: vgaarb: bridge control possible
[    0.313169] pci 0000:01:00.0: vgaarb: setting as boot device
[    0.313169] vgaarb: loaded
...
[    0.534844] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    0.534871] efifb: probing for efifb
[    0.534882] efifb: showing boot graphics
[    0.537785] efifb: framebuffer at 0xfa00000000, using 25600k, total 25600k
[    0.537787] efifb: mode is 2560x1600x32, linelength=16384, pages=1
[    0.537788] efifb: scrolling: redraw
[    0.537788] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    0.537845] Console: switching to colour frame buffer device 160x50
[    0.541740] fb0: EFI VGA frame buffer device
[    0.543342] ACPI: AC: AC Adapter [ADP0] (off-line)
[    0.543378] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
[    0.543390] ACPI: button: Power Button [PWRB]
[    0.543409] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1
[    0.543417] ACPI: button: Lid Switch [LID0]
[    0.543430] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[    0.543457] ACPI: button: Power Button [PWRF]
[    0.543508] Monitor-Mwait will be used to enter C-1 state
...
[    0.806995] acpi device:01: registered as cooling_device16
[    0.807027] acpi PNP0C14:03: duplicate WMI GUID 05901221-D566-11D1-B2F0-00A0C9062910 (first instance was on PNP0C14:00)
[    0.807067] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/LNXVIDEO:00/input/input4
[    0.807191] ACPI: video: Video Device [VGA] (multi-head: yes  rom: no  post: no)
[    0.807316] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PCI0.GP17.VGA.LCD._BCM.AFN7], AE_NOT_FOUND (20210105/psargs-330)

[ 0.807499] Initialized Local Variables for Method [_BCM]: [ 0.807500] Local0: 0000000038713046 <Obj> Integer 00000000000000FF [ 0.807505] Local1: 0000000029383804 <Obj> Integer 0000000000000000

[ 0.807508] Initialized Arguments for Method [_BCM]: (1 arguments defined for method invocation) [ 0.807508] Arg0: 00000000ceb92cb1 <Obj> Integer 0000000000000064

[ 0.807513] ACPI Error: Aborting method _SB.PCI0.GP17.VGA.LCD.BCM due to previous error (AE_NOT_FOUND) (20210105/psparse-529) [ 0.807609] ACPI: _SB.PCI0.GP17.VGA_.LCD_: _BCM evaluation failed [ 0.807641] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13/LNXVIDEO:01/input/input5 ... [ 2.692008] input: Ideapad extra buttons as /devices/pci0000:00/0000:00:14.3/PNP0C09:00/VPC2004:00/input/input11 [ 2.692077] ideapad_acpi VPC2004:00: Keyboard backlight control not available [ 2.698741] ccp 0000:05:00.2: enabling device (0000 -> 0002) [ 2.699039] ccp 0000:05:00.2: ccp: unable to access the device: you might be running a broken BIOS. [ 2.703452] ideapad_acpi VPC2004:00: DYTC interface is not available ... [ 4.424514] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input16 [ 4.424562] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input17 [ 4.424591] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input18 [ 4.424619] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input19 [ 4.424646] input: HDA NVidia HDMI/DP,pcm=10 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input20 [ 4.424676] input: HDA NVidia HDMI/DP,pcm=11 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card0/input21 [ 4.466797] input: HD-Audio Generic Mic as /devices/pci0000:00/0000:00:08.1/0000:05:00.6/sound/card1/input22 [ 4.466857] input: HD-Audio Generic Headphone as /devices/pci0000:00/0000:00:08.1/0000:05:00.6/sound/card1/input23 [ 4.498362] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 460.73.01 Thu Apr 1 21:40:36 UTC 2021 [ 4.504877] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms 460.73.01 Thu Apr 1 21:32:31 UTC 2021 [ 4.537322] r8169 0000:03:00.0 eno1: Link is Down [ 4.599300] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 4.599303] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 [ 4.607340] nvidia_uvm: module uses symbols from proprietary module nvidia, inheriting taint. [ 4.609244] nvidia-uvm: Loaded the UVM driver, major device number 507. [ 4.781539] ACPI: : failed to evaluate _DSM (0x1001) [ 4.781546] ACPI: : failed to evaluate _DSM (0x1001) [ 4.850308] ACPI Warning: _SB.PCI0.GPP0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20210105/nsarguments-61) ...

geoffrey
  • 146
  • 1
    Could you expand on your comment about xrandr and how it "doesn't ... really control the brightness of the backlight"? There is a --brightness option which should allow you to manually set brightness to a value between 0 and 1, with 0.75 being a good place to start ... – matigo May 05 '21 at 12:16
  • I've based my thoughts upon reading the following: https://askubuntu.com/questions/62249/how-do-you-change-brightness-color-and-sharpness-from-command-line – geoffrey May 05 '21 at 13:33
  • any luck on this? – Bill'o Jan 25 '22 at 09:28
  • I am facing similar problems on my 15ACH6 laptop. On kernels >= 5.16 there is a module named nvidia_wmi_ec_backlight through which I am able to control the brightness. The caveat, though, is that brightness control only works after the system resumes from sleep (i.e. on a clean boot it does not work).

    Here are my findings so far: https://forum.manjaro.org/t/changing-brightness-only-works-after-system-resumes-from-sleep/104447

    – Alexandru Dinu Mar 05 '22 at 18:18

5 Answers5

1

This appears to be an issue with some of the proprietary nvidia drivers. In my case, downgrading from nvidia-driver-510 to nvidia-driver-470 in Software & Updates > Additional Drivers solved the issue on my Lenovo Legion 7 (2021).

zunnzunn
  • 111
  • This worked for me. I was able to get screenbrightness working by first changing etc/default/grub, setting GRUB_CMDLINE_LINUX_DEFAULT to quiet splash nvidia.NVreg_RegistryDWords=EnableBrightnessControl=1. I then went to Software & Updates > Additional Drivers and selected using NVIDIA driver metapckage from nvidia-driver-535(proprietary-tested) rather than using X.Org X server - Nouveau display driver from xserver-xorg-video-nouveau (open source) – Blargian Jan 03 '24 at 07:06
0

Focusing on the ACPI errors in dmesg output, in particular following line: ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PCI0.GP17.VGA.LCD._BCM.AFN7], I've stumbled upon one other topic that reported the same kind of error. As Colin Ian King says:

The ACPI driver attempted to evaluate (execute) the ACPI brightness control method for the screen but this failed because the ACPI AML byte code in your firmware did not have the object _SB.PCI0.GP17.VGA.LCD._BCM.AFN7 defined for some reason. The upshot of all of this is that the ACPI brightness control won't work. This is a firmware issue, I do not know of any workarounds apart from checking to see if you can get an updated BIOS firmware that may fix this.

geoffrey
  • 146
0

Took some time to realize how to make keyboard backlight work on Ubuntu 20 on my Lenovo Legion Slim 7. Apparently, the support is built-in by Lenovo into the BIOS and all keyboard shortcuts are the same as Windows. Fn+Space switch between modes. The reason the lights turn off when using Linux is somehow Linux boot sets the brightness to 0. You can either go to LED control in /sys/class and increase brightness there or simply do Fn+Up arrow to increase brightness (Fn+Down arrow to reduce it). That's it!

Also, as mentioned in the question above, xrandr can be used to control screen brightness (the usual way doesn't work), but it cannot be used for controlling keyboard led brightness. No modification of grub file helped in any way so better not do it.

Haru
  • 1
0

You may want to use xrandr to control the screen 'brightness':

# get the device name
xrandr | grep -w connected | awk -F'[ ]' '{print $1}'

show current bright value

xrandr --verbose | awk '/ connected /{}/Brightness:/{print $2}'

setup the bright to 0.5

#xrandr --output xrandr | grep -w connected | awk -F'[ ]' '{print $1}' --brightness <value> xrandr --output xrandr | grep -w connected | awk -F'[ ]' '{print $1}' --brightness 0.5

ref: https://github.com/coffeeandc0d3/brightness-controller.non-hardware.controller.git

0

I was able to get screen brightness on my Lenovo Legion 7 16ACHg6 working by first changing etc/default/grub, setting GRUB_CMDLINE_LINUX_DEFAULT to quiet splash nvidia.NVreg_RegistryDWords=EnableBrightnessControl=1

I then went to Software & Updates > Additional Drivers and selected using NVIDIA driver metapckage from nvidia-driver-535(proprietary-tested) rather than using X.Org X server - Nouveau display driver from xserver-xorg-video-nouveau (open source)

After applying the changes and rebooting screen brightness was working again.

Blargian
  • 101