Fixing s2idle Wake Failures on the ASUS TUF F15 (FX507VV4) with an ACPI Table Override

Abstract: Two firmware bugs stop built-in wake on this laptop: a FACP power-button flag and a missing _PRW for the lid. Patch both with an early-initrd ACPI override — no BIOS flash needed.

Created: 2026-11-06 by

On this laptop, the internal keyboard, lid, and power button fail to wake the machine from s2idle because of two bugs in the ACPI firmware — and both can be repaired from Linux without flashing the BIOS. Override the FACP table to fix the power button, and inject a small SSDT that supplies the wake object the lid is missing. Once the patched tables load from an early initrd, all three built-in wake sources work again.

Why the wake sources go dead during s2idle

While the system sits in s2idle, the kernel only arms the wake events it knows about. ACPI devices declare their wake capability with a _PRW object, which names the general-purpose event (GPE) that signals "this device wants to wake the system." On this model, the embedded controller reports internal key presses and lid transitions through GPE 0x02, but the DSDT never attaches a _PRW to the lid device at \_SB.PC00.LPCB.LID0. Because nothing claims GPE 0x02, the kernel masks it at sleep, so key presses and lid openings never become wake events.

The power button fails for a different reason. In the FACP table, the Control Method Power Button flag is set to 1, which tells the OS to expect the button to signal through an ACPI control method rather than fixed hardware event logic. This firmware never delivers that event the way Linux expects, and clearing the flag restores wake-on-power-button.

USB devices keep working because they wake through the PCI/PCIe power-management path, which neither bug touches. That is why an external mouse or keyboard reliably wakes the machine while nothing built-in does.

Confirm the diagnosis before patching

  • grep LID0 /proc/acpi/wakeup returns nothing — the lid device is absent entirely, meaning no wake path was ever declared for it.
  • Decompiled tables (below) show Device (LID0) with no _PRW underneath it, plus the Control Method Power Button (V1) flag set in facp.dsl.

Install the tooling and dump both tables:

sudo apt install acpica-tools cpio
mkdir -p ~/acpi-fix/kernel/firmware/acpi
cd ~/acpi-fix
sudo cat /sys/firmware/acpi/tables/FACP > facp.dat
iasl -d facp.dat
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
iasl -d dsdt.dat

The odd-looking directory layout matters: the kernel only reads overrides from kernel/firmware/acpi inside the early initrd, so create that path now.

Patching the tables

Fix the power button in FACP

Open facp.dsl and make two edits:

  1. Raise Oem Revision by one (e.g. 01072009 → 0107200A). The kernel loads an override only when its revision is at least as high as the shipped table's.
  2. Change Control Method Power Button (V1) from 1 to 0.

Compile and place the result in the override directory:

iasl -tc facp.dsl
cp facp.aml kernel/firmware/acpi/

Give the lid a wake path via SSDT

First confirm the exact scope name in your DSDT — recent platforms use PC00, older ones PCI0:

grep -B 2 -A 6 "Device (LID0)" dsdt.dsl

Then write a small SSDT that adds the missing _PRW: GPE 0x02, wakeable from S0 (the second package element, Zero, matches how s2idle operates):

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
cp ssdt-lidwake.aml kernel/firmware/acpi/

If your LID0 lives under PCI0, adjust both the External and Scope lines; a mismatched path makes the SSDT a silent no-op.

Loading the override at boot

Pack the kernel/ directory into an uncompressed newc cpio archive and place it in /boot:

find kernel -print0 | cpio --null -o --format=newc > acpi_override
sudo cp acpi_override /boot/acpi_override

Register it as an extra early initrd by adding this line to /etc/default/grub, then run sudo update-grub and reboot:

GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override"

Keeping the override in its own file — instead of baking it into the distribution initramfs — means kernel upgrades and initramfs regeneration scripts never touch it. After rebooting, verify:

grep LID0 /proc/acpi/wakeup
LID0      S0    *enabled   platform:PNP0C0D:01

Suspend the machine and test the internal keyboard, the lid, and the power button. All three should now wake it.

Keeping the fix working

  • Kernel updates: the override survives package upgrades because it is a separate early initrd, but re-test suspend after major kernel changes in case wake handling shifts.
  • BIOS updates: if ASUS ships firmware that fixes these tables, remove the override (delete /boot/acpi_override and the GRUB line, then sudo update-grub) instead of layering old patches onto new firmware.
  • Keep the sources: retain the .dsl files. If a future BIOS changes the GPE number or device path, you must re-dump and re-edit rather than reuse compiled blobs.
  • Safety net: a bad table loads very early and can prevent booting. Keep a live USB handy so you can delete /boot/acpi_override if the machine ever refuses to start.

Frequently Asked Questions

Why doesn't writing to /proc/acpi/wakeup fix this?

That interface only toggles wake for devices that already declared a wake path. With no _PRW on the lid and no driver claiming GPE 0x02, there is nothing to enable — the missing object must come from the tables themselves.

Why do USB devices wake the laptop fine?

USB controllers signal wake through the PCI/PCIe power-management mechanism, not through the embedded controller's GPE. Both firmware bugs affect only the ACPI/fixed-event path the built-in devices use.

Is overriding ACPI tables risky?

The mechanism is kernel-supported and validates each override, but a malformed table loads very early. Compile cleanly, change as little as possible, and know how to remove the file from a live environment.

My DSDT shows PCI0 instead of PC00 — now what?

Device paths differ across firmware generations. Always grep the decompiled DSDT for the lid's actual parent scope and use that name in the SSDT.

Will a BIOS update fix it permanently?

Possibly. Check ASUS release notes for sleep or wake fixes; if the new firmware declares the wake paths correctly, delete the override and confirm behavior before discarding your working setup.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More