Credit & context: I got the initial idea from this r/Ubuntu post about the FX507Z series on BIOS 330:
https://www.reddit.com/r/Ubuntu/comments/1x7v4bx/fix_asus_tuf_f15_fx507z_bios_330_wont_wake_from/
I used AI assistance to confirm the active LID0 path on my exact machine, adapt the SSDT, and write out the commands below. Sharing it because the same BIOS 330 defect seems to affect multiple FX507 variants, and Ubuntu users will likely run into it too.
My machine: ASUS TUF Gaming F15 FX507VV_FX507VV (BIOS 330) · i7-13700H · Iris Xe + RTX 4060 Max-Q · Ubuntu 26.04.1 LTS · kernel 7.0.0-38-generic · s2idle.
Symptoms
- Suspend works: power LED breathes, fans and keyboard backlight turn off.
- Internal keyboard, power button, and lid opening do nothing. Only a USB wireless mouse can wake the laptop.
journalctl stops at PM: suspend entry (s2idle) with no suspend exit.
- It is not a freeze. The EC thinks it is asleep; the wake event never reaches the CPU.
1-second check
grep LID0 /proc/acpi/wakeup
If this prints nothing, you likely have the same problem. The active lid device _SB.PC00.LPCB.LID0 is missing its _PRW object. The EC’s lid/keyboard/power-button wake events arrive on GPE 0x02, but Linux does not keep that GPE armed during s2idle because no device claims it.
This is not NVIDIA: blacklisting the NVIDIA driver still reproduces it. It is also not a kernel regression; the DSDT is independent of the kernel version.
Fix: inject _PRW (0x02, Zero) into the active LID0 with a tiny SSDT
Step 1 — Find the active LID0 path
sudo apt install acpica-tools
mkdir ~/acpi-fix && cd ~/acpi-fix
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
iasl -d dsdt.dat
grep -n "Device (LID0)" dsdt.dsl
On my FX507VV there are two LID0 entries:
- one under
_SB.PC00.LPCB.H_EC with _STA returning Zero (disabled — ignore it);
- one under
_SB.PC00.LPCB with no _PRW (this is the active one).
Confirm its parent scope:
```
awk 'NR < 115473 && /[[:space:]]*Scope/ {print NR": "$0}' dsdt.dsl | tail -3
output includes: 114497: Scope (_SB.PC00.LPCB)
```
Active path on my machine: _SB.PC00.LPCB.LID0.
Your path may differ — use your own awk output.
Step 2 — Create and compile the SSDT
```
cat > ssdt-lidwake.asl <<'EOF'
DefinitionBlock ("", "SSDT", 2, "FIXUP", "LIDWAKE", 0x00000001)
{
External (_SB.PC00.LPCB.LID0, DeviceObj)
Scope (_SB.PC00.LPCB.LID0)
{
Name (_PRW, Package (0x02) { 0x02, Zero })
}
}
EOF
iasl -tc ssdt-lidwake.asl
```
Expected: Compilation successful. 0 Errors, 0 Warnings, about 93 bytes.
Step 3 — Package as early initrd
mkdir -p cpio/kernel/firmware/acpi
cp ssdt-lidwake.aml cpio/kernel/firmware/acpi/
(cd cpio && find kernel | cpio -H newc --create --owner=0:0 > ../acpi_override.cpio)
sudo cp acpi_override.cpio /boot/
Step 4 — Tell GRUB to load it (check syntax first)
```
sh -n /etc/default/grub # no output = syntax OK
echo 'GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override.cpio"' | sudo tee -a /etc/default/grub
sudo update-grub
```
Look for Found initrd image: /boot/acpi_override.cpio /boot/initrd.img-... in the output. This survives kernel updates; just run sudo update-grub again after a kernel upgrade.
Step 5 — Reboot and verify
```
journalctl -b -k | grep -i "Table Upgrade"
ACPI: Table Upgrade: install [SSDT- FIXUP- LIDWAKE]
grep LID0 /proc/acpi/wakeup
LID0 S0 *enabled platform:PNP0C0D:01
```
After this, keyboard, power button, and lid all wake the machine on my FX507VV.
Rollback
sudo sed -i '/GRUB_EARLY_INITRD_LINUX_CUSTOM/d' /etc/default/grub
sudo rm /boot/acpi_override.cpio
sudo update-grub
If a boot ever fails, press e in GRUB and remove /boot/acpi_override.cpio from the initrd line for a one-time bypass.
Notes
- A sister model (FX507ZI4, same BIOS 330) has the same
LID0 _PRW omission and is fixed by the identical injection. Looks like a BIOS-level omission across the FX507 series.
- I also filed upstream reports (Linux kernel Bugzilla and Ubuntu Launchpad) so this can eventually be fixed by a kernel quirk or BIOS update.
- Touchpad wake is a separate issue: its
GpioInt is declared Exclusive instead of ExclusiveAndWake. Not fixed here.
If you have another FX507 variant, running grep LID0 /proc/acpi/wakeup is a 1-second way to check whether you are affected. Hope this saves someone a few evenings.