#include <linux/acpi.h>
 #include <linux/device.h>
+#include <linux/dmi.h>
 #include <linux/suspend.h>
 
 #include "../sleep.h"
        {}
 };
 
+static int lps0_prefer_microsoft(const struct dmi_system_id *id)
+{
+       pr_debug("Preferring Microsoft GUID.\n");
+       prefer_microsoft_dsm_guid = true;
+       return 0;
+}
+
+static const struct dmi_system_id s2idle_dmi_table[] __initconst = {
+       {
+               /*
+                * ASUS TUF Gaming A17 FA707RE
+                * https://bugzilla.kernel.org/show_bug.cgi?id=216101
+                */
+               .callback = lps0_prefer_microsoft,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "ASUS TUF Gaming A17"),
+               },
+       },
+       {}
+};
+
 static int lps0_device_attach(struct acpi_device *adev,
                              const struct acpi_device_id *not_used)
 {
        .end = acpi_s2idle_end,
 };
 
-void acpi_s2idle_setup(void)
+void __init acpi_s2idle_setup(void)
 {
+       dmi_check_system(s2idle_dmi_table);
        acpi_scan_add_handler(&lps0_handler);
        s2idle_set_ops(&acpi_s2idle_ops_lps0);
 }