#1151184 linux: HP Pavilion Gaming 17-cd0xxx needs ec_honor_dsdt_gpe quirk (ECDT has wrong EC GPE, Fn/EC events delayed)

Package:
src:linux
Source:
src:linux
Submitter:
Patrick Peer
Date:
2026-10-17 20:29:02 UTC
Severity:
normal
Tags:
#1151184#5
Date:
2026-10-17 20:27:14 UTC
From:
To:
Hardware: HP Pavilion Gaming Laptop 17-cd0xxx (board 85FF, BIOS F.12
08/02/2019),
          Intel i7-9750H, Cannon Lake PCH
Kernel:   linux-image-7.2.11+deb14-amd64 7.2.11-1. The current upstream
(linux-pm linux-next)
          ec_dmi_table has no entry for this model either.

Problem
-------
The Fn brightness keys never worked reliably. Key presses are delivered late
and in bursts: they show up on the "Video Bus" input device only when some
unrelated EC transaction happens (for example opening the hp_accel /
lis3lv02d accelerometer input device releases all queued presses at once).

Cause
-----
The ECDT and the DSDT disagree about the EC GPE:

  ECDT:  GPE bit = 0x17, EC_ID \_SB.PCI0.LPCB.H_EC
  DSDT:  Device (\_SB.PCI0.LPCB.EC0) { Name (_HID, EisaId ("PNP0C09"))
                                       Name (_GPE, 0x14) ... }

The kernel uses the ECDT value ("ACPI: EC: GPE=0x17"). GPE 0x17 never fires;
the EC raises GPE 0x14, which has no handler. After ~58 minutes of uptime:

  /sys/firmware/acpi/interrupts/sci:   5
  /sys/firmware/acpi/interrupts/gpe17: 0  EN     enabled      unmasked
  /sys/firmware/acpi/interrupts/gpe14: 0     STS invalid      unmasked

This is the same situation as the HP Pavilion Gaming 15-cx0xxx (bug 209989)
and 15-dk1xxx, which got ec_honor_dsdt_gpe quirk entries in
drivers/acpi/ec.c.

Verification
------------
Overriding the ECDT through the initrd (CONFIG_ACPI_TABLE_UPGRADE) with a
copy
whose GPE byte is changed to 0x14 (OEM revision bumped, checksum fixed)
fixes
the problem completely. Two minutes after boot:

  sci:   367
  gpe14: 362  EN     enabled      unmasked
  gpe17: 0         invalid      unmasked

and the brightness keys respond immediately. So the following entry in
ec_dmi_table should fix it (I have not built or booted a kernel with it):

{
/*
* HP Pavilion Gaming Laptop 17-cd0xxx
*/
.callback = ec_honor_dsdt_gpe,
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Gaming Laptop 17-cd0xxx"),
},
},

DMI: sys_vendor "HP", product_name "HP Pavilion Gaming Laptop 17-cd0xxx".

Attachments
-----------
  dmesg-with-override.txt  boot log (kernel), ECDT override active
  ecdt-dsdt.tar.gz         original ECDT and DSDT binaries
  gpe-counters.txt         /sys/firmware/acpi/interrupts snapshot

(The analysis was done with the help of an AI assistant; the measurements
above are from my machine.)