}
 }
 
-static int tts_notify_reboot(struct notifier_block *this,
+static void acpi_sleep_pts_switch(u32 acpi_state)
+{
+       acpi_status status;
+
+       status = acpi_execute_simple_method(NULL, "\\_PTS", acpi_state);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               /*
+                * OS can't evaluate the _PTS object correctly. Some warning
+                * message will be printed. But it won't break anything.
+                */
+               printk(KERN_NOTICE "Failure in evaluating _PTS object\n");
+       }
+}
+
+static int sleep_notify_reboot(struct notifier_block *this,
                        unsigned long code, void *x)
 {
        acpi_sleep_tts_switch(ACPI_STATE_S5);
+
+       acpi_sleep_pts_switch(ACPI_STATE_S5);
+
        return NOTIFY_DONE;
 }
 
-static struct notifier_block tts_notifier = {
-       .notifier_call  = tts_notify_reboot,
+static struct notifier_block sleep_notifier = {
+       .notifier_call  = sleep_notify_reboot,
        .next           = NULL,
        .priority       = 0,
 };
        pr_info(PREFIX "(supports%s)\n", supported);
 
        /*
-        * Register the tts_notifier to reboot notifier list so that the _TTS
-        * object can also be evaluated when the system enters S5.
+        * Register the sleep_notifier to reboot notifier list so that the _TTS
+        * and _PTS object can also be evaluated when the system enters S5.
         */
-       register_reboot_notifier(&tts_notifier);
+       register_reboot_notifier(&sleep_notifier);
        return 0;
 }