[SOLVED] Brightness Control Not Working - Lenovo Legion 5 15ARH05 (Ryzen 4800H + GTX 1650)

Problem Description

Laptop: Lenovo Legion 5 15ARH05 (AMD Ryzen 7 4800H + NVIDIA GTX 1650)
OS: Fedora 43 Workstation (GNOME 49, Wayland)
Kernel: 6.18.5 (also affects earlier versions)

Symptoms:

  • Screen brightness stuck at maximum
  • No brightness slider in GNOME Settings → Displays
  • Fn+F5/F6 brightness keys do nothing
  • /sys/class/backlight/ directory is empty or contains non-functional acpi_video0

Root Cause

This laptop has four separate issues that must ALL be fixed:

  1. BIOS graphics mode - Must be set to Switchable Graphics (not Discrete)
  2. AMDGPU backlight bug - Driver tries AUX backlight but hardware uses PWM (GitLab issue #1438)
  3. Nouveau driver conflict - Blocks AMDGPU from registering backlight
  4. Module loading - AMDGPU doesn’t auto-load after nouveau blacklist

Complete Solution

Step 1: Configure BIOS

Purpose: Enable AMD iGPU to drive the internal display

  1. Reboot and press F2 to enter BIOS
  2. Navigate to: ConfigurationGraphics Device
  3. Change from “Discrete Graphics” to “Switchable Graphics”
  4. Press F10 to save and exit

Note: This allows the AMD integrated GPU to control the display and backlight. Without this, AMDGPU won’t initialize properly.


Step 2: Blacklist Nouveau Driver

Purpose: Prevent nouveau from conflicting with AMDGPU backlight registration

Create the blacklist file:

bash

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

Add these two lines:

text

blacklist nouveau
options nouveau modeset=0

Save and exit (Ctrl+O, Enter, Ctrl+X)

Note: Your NVIDIA GPU will still work via NVK (nouveau Vulkan driver) for 3D rendering. This only removes the display driver that conflicts with AMDGPU.


Step 3: Force AMDGPU to Load at Boot

Purpose: Ensure AMDGPU loads automatically

Run these commands:

bash

echo "amdgpu" | sudo tee /etc/modules-load.d/amdgpu.conf
sudo dracut --force --add-drivers "amdgpu"

The first command tells systemd to load the module. The second rebuilds initramfs to include AMDGPU.


Step 4: Add Kernel Parameter

Purpose: Force AMDGPU to use PWM backlight instead of broken AUX

Edit GRUB configuration:

bash

sudo nano /etc/default/grub

Find the line starting with GRUB_CMDLINE_LINUX= and add amdgpu.backlight=0:

text

GRUB_CMDLINE_LINUX="rhgb quiet amdgpu.backlight=0"

Save the file, then regenerate GRUB config:

bash

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Technical note: This works around a hardware bug where the panel reports AUX backlight support but is actually wired for PWM control.


Step 5: Reboot

bash

sudo reboot

Verification

After reboot, verify everything is working:

Check backlight device exists:

bash

ls /sys/class/backlight/

Expected output: amdgpu_bl0 (or amdgpu_bl1)

Verify kernel parameter is active:

bash

cat /proc/cmdline

Should include: amdgpu.backlight=0

Confirm AMDGPU is loaded:

bash

lsmod | grep amdgpu

Should show amdgpu and related modules

Verify nouveau is NOT loaded:

bash

lsmod | grep nouveau

Should return nothing (no output)

Test brightness control:

  • GNOME Settings → Displays → Brightness slider should appear and work
  • Fn+F5 (decrease) and Fn+F6 (increase) should control brightness
  • Manual test:

bash

echo 128 | sudo tee /sys/class/backlight/amdgpu_bl0/brightness

Screen should dim immediately


Troubleshooting

Issue: Still no backlight device after all steps

Check BIOS setting again:

  • Enter BIOS (F2 at boot)
  • Verify Graphics Device = “Switchable Graphics” (NOT Discrete)

Verify all commands ran successfully:

bash

# Check blacklist exists
cat /etc/modprobe.d/blacklist-nouveau.conf

# Check module load config
cat /etc/modules-load.d/amdgpu.conf

# Check kernel command line
cat /proc/cmdline | grep amdgpu.backlight

Issue: Brightness slider works but screen doesn’t change

Rare, but try changing the parameter value:

bash

sudo nano /etc/default/grub
# Change amdgpu.backlight=0 to amdgpu.backlight=1
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

Why This Fix Works

The Legion 5 15ARH05 has hybrid graphics (AMD iGPU + NVIDIA dGPU). In Linux:

  1. BIOS Switchable mode routes the internal display to AMD iGPU
  2. Blacklisting nouveau prevents driver conflicts over backlight ownership
  3. Forcing AMDGPU load ensures the AMD driver initializes at boot
  4. amdgpu.backlight=0 works around a hardware bug where the panel incorrectly reports AUX backlight support

All four fixes are required. Partial solutions won’t work.


Affected Hardware

This fix applies to:

  • Lenovo Legion 5 15ARH05 (Ryzen 4000 series + GTX 1650/1650Ti/1660Ti)
  • Lenovo IdeaPad Gaming 3 15ARH05 (same platform)
  • Other Renoir-based laptops with AMD+NVIDIA hybrid graphics

References


Credit

Solution developed through community contributions:

  • AMDGPU developers (kernel parameter fix)
  • Arch Linux forums (BIOS discovery)
  • Fedora Discussion users (nouveau conflict identification)
  • Multiple Legion 5 owners across distributions

FINAL NOTE

Hope this helps fix your brightness/backlight issue.

Posting this mostly to document what worked for me so others can get to a working setup faster. I did use AI as a helper to speed up the troubleshooting (searching ideas, narrowing suspects), but I didn’t apply anything blindly, googled it and verified each change on the actual machine.

If you’re following this, don’t just assume it worked because some setting changed. Check the basics as you go:

  • cat /proc/cmdline to confirm your kernel parameters are really applied.
  • lsmod | egrep 'amdgpu|nouveau|nvidia' to confirm the right drivers are loaded (and the wrong ones aren’t).
  • ls /sys/class/backlight to confirm a real backlight device exists; if it’s empty, GNOME can’t show a slider.
  • Finally, test that the screen actually dims/brightens (not just that a number changes).

Think of this as a signpost + checkpoints, not a perfect guide. Use the checks to adapt it to your laptop/kernel as needed.

Hi, Orion!

Thank you so much for your detailed explanation :slightly_smiling_face:

I’m experiencing the same problem you had, and I followed all your instructions, but I still haven’t managed to solve it. Before trying your solution, I also tried several other things I found on the web.

My setup is the same as yours, except for the kernel version (Linux 6.19.9-200.fc43.x86_64).

The symptoms I have are more or less the same as yours, with a few slight differences:

  • I don’t think my brightness is stuck at maximum or minimum; I would say it’s somewhere in the middle.
  • I don’t have a brightness slider in GNOME Settings → Displays, but I do have one here:

As you can see, when I use it, a visual indicator appears on the screen. However, the screen brightness never changes.

  • The exact same behaviour occurs when I use the keyboard brightness keys.
  • My /sys/class/backlight/ directory contains one folder (ideapad) with many folders and files inside it. I didn’t find any acpi_video0 subfolder or file there.

In step 1, the “Configuration” → “Graphics Device” option in the BIOS was already set to “Switchable Graphics”, so I didn’t need to change anything.

I followed steps 2, 3, 4 and 5 as you suggested, without any issues.

Concerning step 4, here’s the line starting with GRUB_CMDLINE_LINUX= in my /etc/default/grub file:

GRUB_CMDLINE_LINUX=“rd.luks.uuid=luks-7831f531-e37d-43ac-b739-69d4f5ad25a6 rhgb quiet acpi_backlight=vendor rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core amdgpu.backlight=0”

Regarding the verifications:

  • The command ls /sys/class/backlight/ returns ideapad.
  • The output of cat /proc/cmdline is BOOT_IMAGE=(hd0,msdos5)/vmlinuz-6.19.9-200.fc43.x86_64 root=UUID=c12b4e4f-19c4-4d30-9dab-c3e28a5a2610 ro rootflags=subvol=root rd.luks.uuid=luks-7831f531-e37d-43ac-b739-69d4f5ad25a6 rhgb quiet acpi_backlight=vendor rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core amdgpu.backlight=0.
  • The command lsmod | grep amdgpu outputs
    amdgpu 21454848 26
    amdxcp 12288 1 amdgpu
    i2c_algo_bit 20480 1 amdgpu
    drm_ttm_helper 20480 3 amdgpu,nvidia_drm
    ttm 135168 2 amdgpu,drm_ttm_helper
    drm_exec 12288 1 amdgpu
    drm_panel_backlight_quirks 12288 1 amdgpu
    gpu_sched 69632 1 amdgpu
    drm_suballoc_helper 20480 1 amdgpu
    video 81920 3 amdgpu,ideapad_laptop,nvidia_modeset
    drm_buddy 32768 1 amdgpu
    drm_display_helper 344064 1 amdgpu
    cec 106496 2 drm_display_helper,amdgpu
  • lsmod | grep nouveau returns nothing.
  • The output of echo 128 | sudo tee /sys/class/backlight/amdgpu_bl0/brightness is
    tee: /sys/class/backlight/amdgpu_bl0/brightness: No such file or directory
    128
    and the screen doesn’t dim.
    However, the screen does dim when I don’t use the computer for a while, as expected.

Concerning the troubleshooting section:

  • cat /etc/modprobe.d/blacklist-nouveau.conf returns
    blacklist nouveau
    options nouveau modeset=0
  • cat /etc/modules-load.d/amdgpu.conf outputs amdgpu.
  • The command cat /proc/cmdline | grep amdgpu.backlight returns
    BOOT_IMAGE=(hd0,msdos5)/vmlinuz-6.19.9-200.fc43.x86_64 root=UUID=c12b4e4f-19c4-4d30-9dab-c3e28a5a2610 ro rootflags=subvol=root rd.luks.uuid=luks-7831f531-e37d-43ac-b739-69d4f5ad25a6 rhgb quiet acpi_backlight=vendor rd.driver.blacklist=nouveau,nova_core modprobe.blacklist=nouveau,nova_core amdgpu.backlight=0.
  • I also tried using amdgpu.backlight=1 in /etc/default/grub, but nothing changed.

Regarding the final notes, lsmod | egrep ‘amdgpu|nouveau|nvidia’ outputs the following:
nvidia_uvm 4210688 0
nvidia_drm 159744 8
nvidia_modeset 2265088 5 nvidia_drm
nvidia 15896576 64 nvidia_uvm,nvidia_modeset
amdgpu 21454848 26
amdxcp 12288 1 amdgpu
i2c_algo_bit 20480 1 amdgpu
drm_ttm_helper 20480 3 amdgpu,nvidia_drm
ttm 135168 2 amdgpu,drm_ttm_helper
drm_exec 12288 1 amdgpu
drm_panel_backlight_quirks 12288 1 amdgpu
gpu_sched 69632 1 amdgpu
drm_suballoc_helper 20480 1 amdgpu
video 81920 3 amdgpu,ideapad_laptop,nvidia_modeset
drm_buddy 32768 1 amdgpu
drm_display_helper 344064 1 amdgpu
cec 106496 2 drm_display_helper,amdgpu

Do you have any idea how I can solve this brightness problem?

Thank you very much in advance :slightly_smiling_face:

Hi Nuno,

Sorry about the late response.

Are you still tackling this issue?

In that case can you try doing this for me?

sudo nano /etc/default/grub - get into this config file and change acpi_backlight=vendor to acpi_backlight=native.

Try this and let me know how it pans out.

Hi, Orion!

Thanks for your reply.

Yes, I still had that issue until I tried your last tip - and it worked ! I was able to fix it thanks to you :slightly_smiling_face:

Thank you again and have a nice day!