Public bug reported:

# Bug Report: Backlight control not working on ASUS hybrid GPU laptop
(AMD iGPU + NVIDIA dGPU)

## Summary

On an ASUS laptop with hybrid graphics (AMD iGPU + NVIDIA dGPU), **all
backlight interfaces exposed under `/sys/class/backlight/` are non-
functional**: writing valid brightness values does not change the
physical panel brightness.

This happens despite the firmware providing ACPI methods for brightness
control attached to the internal LCD. Brightness control works under
Windows on the same machine.

## System Information

* **OS**: Ubuntu 24.04 LTS
* **Kernel**: 6.14.0-36-generic
* **Hardware Manufacturer**: ASUS
* **Laptop Model**: TUF Gaming A16 (FA608WI series)
* **Display Panel**: BOE NE160QDM-NYJ, 2560x1600 (16:10)
* **Graphics Configuration**: Hybrid (AMD iGPU + NVIDIA dGPU)

  * AMD iGPU: Display controller [1002:150e]
  * NVIDIA dGPU: AD106M [GeForce RTX 4070 Max-Q / Mobile] [10de:2860]
* **Embedded Controller**: ITE5570 (ACPI device `\_SB.I2CB.SMKB`)
* **ACPI OEM ID**: `_ASUS_`
* **ACPI Table ID**: `Notebook`
* **ACPI Revision**: 2
* **ACPI OEM Revision**: `0x01072009`

### Relevant ACPI Device Paths

* AMD iGPU LCD: `\_SB.PCI0.GPPA.VGA.LCD`
* NVIDIA dGPU: `\_SB.PCI0.GPP9.PEGP`
* NVIDIA eDP output: `\_SB.PCI0.GPP9.PEGP.EDP1`
* Embedded controller: `\_SB.PCI0.SBRG.EC0` (PNP0C09)

## Problem Description

On this machine, `/sys/class/backlight/` typically contains entries such
as:

* `amdgpu_bl*`
* `acpi_video0`
* `nvidia_0` (when NVIDIA driver is loaded)

Changing brightness via any of these interfaces:

* Succeeds at the sysfs level (no error writing to `brightness`)
* Does **not** change the physical panel brightness at all

Additional symptoms:

* Brightness hotkeys (Fn+F5/F6) do not change the actual brightness.
* Desktop environment brightness sliders also have no visible effect.
* Tools like `brightnessctl` can read/write the backlight values but do not 
affect the panel.
* Under Windows on the same hardware, brightness control works correctly.

In other words, **backlight devices are present but completely
ineffective**.

## ACPI Observations

### Internal LCD backlight device

The DSDT defines an LCD device under the AMD iGPU:

* Device: `\_SB.PCI0.GPPA.VGA.LCD`
* Properties and methods:

  * `_ADR = 0x0110`
  * `_BCL` returns a package of brightness levels

    * Backed by a package `BCLB` containing 52 levels (from 0x02 to 0x64).
  * `_BCM` (brightness control method):

    * Accepts a brightness level argument.
    * Computes a value and calls an OEM method `AFN7`.
  * `AFN7` appears to write the actual brightness value into a hardware 
register (EC or GPU-related).

This suggests the firmware implements a complete ACPI brightness control
path attached to the AMD iGPU LCD device.

### BRTN method and dual notifications

The firmware defines a `BRTN` method that issues ACPI `Notify()` calls
to both:

* `\_SB.PCI0.GPPA.VGA.LCD` (internal LCD driven by AMD iGPU)
* `\_SB.PCI0.GPP9.PEGP.EDP1` (eDP output under NVIDIA dGPU)

This dual notification is unusual for a single internal panel and may
confuse the backlight selection logic in a hybrid GPU setup, where:

* The backlight is physically tied to the internal panel,
* But notifications are also sent to an NVIDIA eDP output.

In addition, kernel logs sometimes show:

```text
ACPI BIOS Error (bug): Could not resolve symbol [^PCI0.GPP9.PEGP.EDP1], 
AE_NOT_FOUND (20240827/psargs-332)
```

indicating that the `EDP1` reference used in notifications is not always
resolvable in the ACPI namespace.

### Missing PNLF device

* The original OEM ACPI tables do **not** provide a `PNLF` device.
* This is a known requirement for some ACPI backlight paths to work reliably on 
Linux.

A custom SSDT (`SSDT-PNLF`) was injected to add a `PNLF` device
referencing the iGPU domain, but it does not result in a functional
backlight.

### Name/namespace inconsistencies

There are minor inconsistencies between external references and actual
device names:

* Some external declarations use names like `VGA_` / `LCD_`.
* The actual device nodes are named `VGA` / `LCD`.

This may cause some brightness-related methods or notifications to bind
incorrectly.

## Experiments and Workarounds

### 1. PNLF injection (SSDT-PNLF)

A custom SSDT was created to inject a `PNLF` device that delegates to
the existing LCD backlight methods:

* `Device (PNLF)` under the same scope as the AMD iGPU (e.g. 
`\_SB.PCI0.GPPA.VGA`).
* Implements `_BCL`, `_BCM`, `_BQC` by calling the LCD device methods.

The SSDT is loaded via GRUB ACPI table override and/or initramfs:

* `/etc/default/grub` sets `GRUB_ACPI_TABLES=/boot/acpi/tables.list`.
* Kernel log shows:
  `ACPI: Table Upgrade: install [SSDT-   GPT-    PNLF]`.

The same SSDT is also copied into the initramfs at
`kernel/firmware/acpi/` via a custom `initramfs-tools` hook in
`/usr/share/initramfs-tools/hooks/acpi-override`. `lsinitramfs` confirms
the AML files are present.

**Result:**

* `PNLF` appears in the ACPI namespace (verified with `acpidump`/`iasl -d`).
* An ACPI backlight interface is exposed.
* **However, changing brightness through this interface still does not change 
the physical panel brightness.**

### 2. BRTN override (SSDT-BRTN-FIX)

A second SSDT overrides the `BRTN` method to avoid dual notifications:

* Removes the `Notify()` call to `\_SB.PCI0.GPP9.PEGP.EDP1`.
* Keeps the notification to `\_SB.PCI0.GPPA.VGA.LCD`.

This SSDT is also loaded both via GRUB ACPI override and initramfs.
Kernel logs and ACPI dumps confirm its presence.

**Result:**

* The override is active.
* Brightness hotkeys still do not change the panel brightness.
* Sysfs backlight interfaces remain non-functional.

### 3. Driver selection and blacklisting

Different combinations of drivers and kernel parameters have been tried,
including:

* Blacklisting `acpi_video` and `video` modules, to force vendor/driver
backlight:

  * `modprobe.blacklist=video,acpi_video`
* Enabling NVIDIA backlight handler:

  * `NVreg_EnableBacklightHandler=1`
* Letting `amdgpu_bl` handle the backlight (without `acpi_video`).
* Leaving `acpi_video` as the handler.

Various kernel command line options have also been tested:

* `acpi_osi=!`
* `acpi_backlight=native` (and other values)
* `amdgpu.abmlevel=0`
* `amdgpu.enable_psr=0`

**Result:**

* In all these configurations, the backlight devices in
`/sys/class/backlight/` accept writes to `brightness` but **the actual
panel brightness does not change**.

### 4. NVIDIA driver presence/absence

The system has been tested both with and without the proprietary NVIDIA
driver:

* With `nvidia-driver-535` installed and loaded (with `nvidia_0` backlight 
handler).
* With NVIDIA driver completely removed or blacklisted (only AMD iGPU active).

**Result:**

* The problem is present in both scenarios:

  * With NVIDIA loaded, `nvidia_0` exists but does nothing for the internal 
panel.
  * With only AMD iGPU active, the `amdgpu_bl*` / ACPI backlight devices are 
still non-functional.

## Expected Behavior

On this hardware, Linux should:

1. Expose at least one **functional** backlight device in 
`/sys/class/backlight/` that correctly drives the internal LCD backlight.
2. Allow brightness control via:

   * Function keys (Fn+F5/F6),
   * Desktop environment brightness sliders,
   * CLI tools (e.g. `brightnessctl`).
3. Apply brightness changes immediately and consistently.

## Actual Behavior

* Backlight devices exist in `/sys/class/backlight/` (e.g. `amdgpu_bl*`,
`acpi_video0`, `nvidia_0`), but:

  * Writing valid values to their `brightness` files **does not change** the 
physical panel brightness.
* Brightness hotkeys/sliders have no effect on the panel.
* ACPI dumps show valid brightness control methods (`_BCL`, `_BCM`) and an OEM 
method (`AFN7`) intended to program the brightness register, but the Linux 
backlight stack never reaches a functional hardware path.

## Analysis / Suspected Root Causes

*(These are hypotheses based on observation, not confirmed facts.)*

1. **Hybrid GPU + dual notification issue**

   * The `BRTN` method notifies both the AMD LCD and an NVIDIA eDP device 
(`PEGP.EDP1`).
   * Combined with the lack of an OEM `PNLF`, this may confuse the backlight 
selection or binding logic so that no backlight interface ends up wired to the 
actual ACPI `_BCM/AFN7` path that controls the panel.

2. **PNLF absence and manual injection**

   * The OEM firmware does not provide a `PNLF`.
   * The manually injected `PNLF` appears in the namespace and is recognized by 
the kernel, but it still does not result in a functional backlight, suggesting 
deeper issues in how the ACPI/video stack associates this device with the real 
LCD.

3. **Namespace inconsistencies**

   * The presence of unresolved symbol errors (e.g. `AE_NOT_FOUND` for
`PEGP.EDP1`) and inconsistent external declarations (`VGA_`/`LCD_` vs
`VGA`/`LCD`) points to a firmware/ACPI naming issue that may break the
chain between OS backlight calls and the OEM `AFN7` method.

## Impact

* **Severity**: High – basic brightness control on a laptop is broken.
* **Frequency**: Always reproducible on this model with Ubuntu 24.04 and kernel 
6.14.0-36-generic.
* **Workaround**: None effective so far, despite:

  * ACPI overrides (PNLF, BRTN fix),
  * Driver blacklisting,
  * Different backlight handler configurations,
  * Proprietary NVIDIA driver enabled/disabled.

## Reproduction Steps

1. Boot Ubuntu 24.04 LTS with kernel 6.14.0-36-generic on an ASUS TUF Gaming 
A16 (FA608WI) with hybrid graphics enabled.
2. List backlight devices:

   ```bash
   ls -l /sys/class/backlight/
   ```
3. Try changing brightness:

   ```bash
   for d in /sys/class/backlight/*; do
       echo "Testing $d"
       cat "$d/brightness" "$d/max_brightness"
       echo 1 | sudo tee "$d/brightness"
       echo $(( $(cat "$d/max_brightness") / 2 )) | sudo tee "$d/brightness"
   done
   ```
4. Observe that **panel brightness does not change at all** in any case.
5. Press brightness hotkeys and use the desktop brightness slider: no visible 
effect.

ProblemType: Bug
DistroRelease: Ubuntu 24.04
Package: linux-image-6.14.0-36-generic 6.14.0-36.36~24.04.1
ProcVersionSignature: Ubuntu 6.14.0-36.36~24.04.1-generic 6.14.11
Uname: Linux 6.14.0-36-generic x86_64
NonfreeKernelModules: nvidia_modeset nvidia
ApportVersion: 2.28.1-0ubuntu3.8
Architecture: amd64
CRDA: N/A
CasperMD5CheckResult: pass
CurrentDesktop: ubuntu:GNOME
Date: Thu Dec 11 09:26:15 2025
InstallationDate: Installed on 2025-10-01 (71 days ago)
InstallationMedia: Ubuntu 24.04.3 LTS "Noble Numbat" - Release amd64 
(20250805.1)
MachineType: ASUSTeK COMPUTER INC. ASUS TUF Gaming A16 FA608WI_FA608WI
ProcEnviron:
 LANG=en_US.UTF-8
 PATH=(custom, no user)
 SHELL=/bin/bash
 TERM=xterm-kitty
ProcFB: 0 amdgpudrmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-6.14.0-36-generic 
root=UUID=7e9746d9-6a82-4421-951a-69a6ffbd0f04 ro acpi_backlight=native 
amdgpu.backlight=1 pci=noaer
RelatedPackageVersions:
 linux-restricted-modules-6.14.0-36-generic N/A
 linux-backports-modules-6.14.0-36-generic  N/A
 linux-firmware                             20240318.git3b128b60-0ubuntu2.21
SourcePackage: linux-hwe-6.14
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 11/25/2024
dmi.bios.release: 5.35
dmi.bios.vendor: American Megatrends International, LLC.
dmi.bios.version: FA608WI.305
dmi.board.asset.tag: ATN12345678901234567
dmi.board.name: FA608WI
dmi.board.vendor: ASUSTeK COMPUTER INC.
dmi.board.version: 1.0
dmi.chassis.asset.tag: No Asset Tag
dmi.chassis.type: 10
dmi.chassis.vendor: ASUSTeK COMPUTER INC.
dmi.chassis.version: 1.0
dmi.ec.firmware.release: 3.3
dmi.modalias: 
dmi:bvnAmericanMegatrendsInternational,LLC.:bvrFA608WI.305:bd11/25/2024:br5.35:efr3.3:svnASUSTeKCOMPUTERINC.:pnASUSTUFGamingA16FA608WI_FA608WI:pvr1.0:rvnASUSTeKCOMPUTERINC.:rnFA608WI:rvr1.0:cvnASUSTeKCOMPUTERINC.:ct10:cvr1.0:sku:
dmi.product.family: ASUS TUF Gaming A16
dmi.product.name: ASUS TUF Gaming A16 FA608WI_FA608WI
dmi.product.version: 1.0
dmi.sys.vendor: ASUSTeK COMPUTER INC.

** Affects: linux-hwe-6.14 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug noble

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2134615

Title:
  ASUS TUF A16 (FA608WI): backlight interfaces present but do not change
  panel brightness (AMD iGPU + NVIDIA dGPU)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-hwe-6.14/+bug/2134615/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to