[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.