GNU Linux-libre 5.10.215-gnu1
[releases.git] / drivers / acpi / sleep.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * sleep.c - ACPI sleep support.
4  *
5  * Copyright (c) 2005 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
6  * Copyright (c) 2004 David Shaohua Li <shaohua.li@intel.com>
7  * Copyright (c) 2000-2003 Patrick Mochel
8  * Copyright (c) 2003 Open Source Development Lab
9  */
10
11 #include <linux/delay.h>
12 #include <linux/irq.h>
13 #include <linux/dmi.h>
14 #include <linux/device.h>
15 #include <linux/interrupt.h>
16 #include <linux/suspend.h>
17 #include <linux/reboot.h>
18 #include <linux/acpi.h>
19 #include <linux/module.h>
20 #include <linux/syscore_ops.h>
21 #include <asm/io.h>
22 #include <trace/events/power.h>
23
24 #include "internal.h"
25 #include "sleep.h"
26
27 /*
28  * Some HW-full platforms do not have _S5, so they may need
29  * to leverage efi power off for a shutdown.
30  */
31 bool acpi_no_s5;
32 static u8 sleep_states[ACPI_S_STATE_COUNT];
33
34 static void acpi_sleep_tts_switch(u32 acpi_state)
35 {
36         acpi_status status;
37
38         status = acpi_execute_simple_method(NULL, "\\_TTS", acpi_state);
39         if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
40                 /*
41                  * OS can't evaluate the _TTS object correctly. Some warning
42                  * message will be printed. But it won't break anything.
43                  */
44                 printk(KERN_NOTICE "Failure in evaluating _TTS object\n");
45         }
46 }
47
48 static int tts_notify_reboot(struct notifier_block *this,
49                         unsigned long code, void *x)
50 {
51         acpi_sleep_tts_switch(ACPI_STATE_S5);
52         return NOTIFY_DONE;
53 }
54
55 static struct notifier_block tts_notifier = {
56         .notifier_call  = tts_notify_reboot,
57         .next           = NULL,
58         .priority       = 0,
59 };
60
61 static int acpi_sleep_prepare(u32 acpi_state)
62 {
63 #ifdef CONFIG_ACPI_SLEEP
64         unsigned long acpi_wakeup_address;
65
66         /* do we have a wakeup address for S2 and S3? */
67         if (acpi_state == ACPI_STATE_S3) {
68                 acpi_wakeup_address = acpi_get_wakeup_address();
69                 if (!acpi_wakeup_address)
70                         return -EFAULT;
71                 acpi_set_waking_vector(acpi_wakeup_address);
72
73         }
74         ACPI_FLUSH_CPU_CACHE();
75 #endif
76         printk(KERN_INFO PREFIX "Preparing to enter system sleep state S%d\n",
77                 acpi_state);
78         acpi_enable_wakeup_devices(acpi_state);
79         acpi_enter_sleep_state_prep(acpi_state);
80         return 0;
81 }
82
83 bool acpi_sleep_state_supported(u8 sleep_state)
84 {
85         acpi_status status;
86         u8 type_a, type_b;
87
88         status = acpi_get_sleep_type_data(sleep_state, &type_a, &type_b);
89         return ACPI_SUCCESS(status) && (!acpi_gbl_reduced_hardware
90                 || (acpi_gbl_FADT.sleep_control.address
91                         && acpi_gbl_FADT.sleep_status.address));
92 }
93
94 #ifdef CONFIG_ACPI_SLEEP
95 static bool sleep_no_lps0 __read_mostly;
96 module_param(sleep_no_lps0, bool, 0644);
97 MODULE_PARM_DESC(sleep_no_lps0, "Do not use the special LPS0 device interface");
98
99 static u32 acpi_target_sleep_state = ACPI_STATE_S0;
100
101 u32 acpi_target_system_state(void)
102 {
103         return acpi_target_sleep_state;
104 }
105 EXPORT_SYMBOL_GPL(acpi_target_system_state);
106
107 static bool pwr_btn_event_pending;
108
109 /*
110  * The ACPI specification wants us to save NVS memory regions during hibernation
111  * and to restore them during the subsequent resume.  Windows does that also for
112  * suspend to RAM.  However, it is known that this mechanism does not work on
113  * all machines, so we allow the user to disable it with the help of the
114  * 'acpi_sleep=nonvs' kernel command line option.
115  */
116 static bool nvs_nosave;
117
118 void __init acpi_nvs_nosave(void)
119 {
120         nvs_nosave = true;
121 }
122
123 /*
124  * The ACPI specification wants us to save NVS memory regions during hibernation
125  * but says nothing about saving NVS during S3.  Not all versions of Windows
126  * save NVS on S3 suspend either, and it is clear that not all systems need
127  * NVS to be saved at S3 time.  To improve suspend/resume time, allow the
128  * user to disable saving NVS on S3 if their system does not require it, but
129  * continue to save/restore NVS for S4 as specified.
130  */
131 static bool nvs_nosave_s3;
132
133 void __init acpi_nvs_nosave_s3(void)
134 {
135         nvs_nosave_s3 = true;
136 }
137
138 static int __init init_nvs_save_s3(const struct dmi_system_id *d)
139 {
140         nvs_nosave_s3 = false;
141         return 0;
142 }
143
144 /*
145  * ACPI 1.0 wants us to execute _PTS before suspending devices, so we allow the
146  * user to request that behavior by using the 'acpi_old_suspend_ordering'
147  * kernel command line option that causes the following variable to be set.
148  */
149 static bool old_suspend_ordering;
150
151 void __init acpi_old_suspend_ordering(void)
152 {
153         old_suspend_ordering = true;
154 }
155
156 static int __init init_old_suspend_ordering(const struct dmi_system_id *d)
157 {
158         acpi_old_suspend_ordering();
159         return 0;
160 }
161
162 static int __init init_nvs_nosave(const struct dmi_system_id *d)
163 {
164         acpi_nvs_nosave();
165         return 0;
166 }
167
168 static bool acpi_sleep_default_s3;
169
170 static int __init init_default_s3(const struct dmi_system_id *d)
171 {
172         acpi_sleep_default_s3 = true;
173         return 0;
174 }
175
176 static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
177         {
178         .callback = init_old_suspend_ordering,
179         .ident = "Abit KN9 (nForce4 variant)",
180         .matches = {
181                 DMI_MATCH(DMI_BOARD_VENDOR, "http://www.abit.com.tw/"),
182                 DMI_MATCH(DMI_BOARD_NAME, "KN9 Series(NF-CK804)"),
183                 },
184         },
185         {
186         .callback = init_old_suspend_ordering,
187         .ident = "HP xw4600 Workstation",
188         .matches = {
189                 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
190                 DMI_MATCH(DMI_PRODUCT_NAME, "HP xw4600 Workstation"),
191                 },
192         },
193         {
194         .callback = init_old_suspend_ordering,
195         .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)",
196         .matches = {
197                 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek Computer INC."),
198                 DMI_MATCH(DMI_BOARD_NAME, "M2N8L"),
199                 },
200         },
201         {
202         .callback = init_old_suspend_ordering,
203         .ident = "Panasonic CF51-2L",
204         .matches = {
205                 DMI_MATCH(DMI_BOARD_VENDOR,
206                                 "Matsushita Electric Industrial Co.,Ltd."),
207                 DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
208                 },
209         },
210         {
211         .callback = init_nvs_nosave,
212         .ident = "Sony Vaio VGN-FW41E_H",
213         .matches = {
214                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
215                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW41E_H"),
216                 },
217         },
218         {
219         .callback = init_nvs_nosave,
220         .ident = "Sony Vaio VGN-FW21E",
221         .matches = {
222                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
223                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21E"),
224                 },
225         },
226         {
227         .callback = init_nvs_nosave,
228         .ident = "Sony Vaio VGN-FW21M",
229         .matches = {
230                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
231                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW21M"),
232                 },
233         },
234         {
235         .callback = init_nvs_nosave,
236         .ident = "Sony Vaio VPCEB17FX",
237         .matches = {
238                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
239                 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB17FX"),
240                 },
241         },
242         {
243         .callback = init_nvs_nosave,
244         .ident = "Sony Vaio VGN-SR11M",
245         .matches = {
246                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
247                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR11M"),
248                 },
249         },
250         {
251         .callback = init_nvs_nosave,
252         .ident = "Everex StepNote Series",
253         .matches = {
254                 DMI_MATCH(DMI_SYS_VENDOR, "Everex Systems, Inc."),
255                 DMI_MATCH(DMI_PRODUCT_NAME, "Everex StepNote Series"),
256                 },
257         },
258         {
259         .callback = init_nvs_nosave,
260         .ident = "Sony Vaio VPCEB1Z1E",
261         .matches = {
262                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
263                 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"),
264                 },
265         },
266         {
267         .callback = init_nvs_nosave,
268         .ident = "Sony Vaio VGN-NW130D",
269         .matches = {
270                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
271                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"),
272                 },
273         },
274         {
275         .callback = init_nvs_nosave,
276         .ident = "Sony Vaio VPCCW29FX",
277         .matches = {
278                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
279                 DMI_MATCH(DMI_PRODUCT_NAME, "VPCCW29FX"),
280                 },
281         },
282         {
283         .callback = init_nvs_nosave,
284         .ident = "Averatec AV1020-ED2",
285         .matches = {
286                 DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"),
287                 DMI_MATCH(DMI_PRODUCT_NAME, "1000 Series"),
288                 },
289         },
290         {
291         .callback = init_old_suspend_ordering,
292         .ident = "Asus A8N-SLI DELUXE",
293         .matches = {
294                 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
295                 DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI DELUXE"),
296                 },
297         },
298         {
299         .callback = init_old_suspend_ordering,
300         .ident = "Asus A8N-SLI Premium",
301         .matches = {
302                 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
303                 DMI_MATCH(DMI_BOARD_NAME, "A8N-SLI Premium"),
304                 },
305         },
306         {
307         .callback = init_nvs_nosave,
308         .ident = "Sony Vaio VGN-SR26GN_P",
309         .matches = {
310                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
311                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR26GN_P"),
312                 },
313         },
314         {
315         .callback = init_nvs_nosave,
316         .ident = "Sony Vaio VPCEB1S1E",
317         .matches = {
318                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
319                 DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1S1E"),
320                 },
321         },
322         {
323         .callback = init_nvs_nosave,
324         .ident = "Sony Vaio VGN-FW520F",
325         .matches = {
326                 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
327                 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW520F"),
328                 },
329         },
330         {
331         .callback = init_nvs_nosave,
332         .ident = "Asus K54C",
333         .matches = {
334                 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
335                 DMI_MATCH(DMI_PRODUCT_NAME, "K54C"),
336                 },
337         },
338         {
339         .callback = init_nvs_nosave,
340         .ident = "Asus K54HR",
341         .matches = {
342                 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
343                 DMI_MATCH(DMI_PRODUCT_NAME, "K54HR"),
344                 },
345         },
346         {
347         .callback = init_nvs_save_s3,
348         .ident = "Asus 1025C",
349         .matches = {
350                 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
351                 DMI_MATCH(DMI_PRODUCT_NAME, "1025C"),
352                 },
353         },
354         /*
355          * https://bugzilla.kernel.org/show_bug.cgi?id=189431
356          * Lenovo G50-45 is a platform later than 2012, but needs nvs memory
357          * saving during S3.
358          */
359         {
360         .callback = init_nvs_save_s3,
361         .ident = "Lenovo G50-45",
362         .matches = {
363                 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
364                 DMI_MATCH(DMI_PRODUCT_NAME, "80E3"),
365                 },
366         },
367         {
368         .callback = init_nvs_save_s3,
369         .ident = "Lenovo G40-45",
370         .matches = {
371                 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
372                 DMI_MATCH(DMI_PRODUCT_NAME, "80E1"),
373                 },
374         },
375         /*
376          * ThinkPad X1 Tablet(2016) cannot do suspend-to-idle using
377          * the Low Power S0 Idle firmware interface (see
378          * https://bugzilla.kernel.org/show_bug.cgi?id=199057).
379          */
380         {
381         .callback = init_default_s3,
382         .ident = "ThinkPad X1 Tablet(2016)",
383         .matches = {
384                 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
385                 DMI_MATCH(DMI_PRODUCT_NAME, "20GGA00L00"),
386                 },
387         },
388         {},
389 };
390
391 static bool ignore_blacklist;
392
393 void __init acpi_sleep_no_blacklist(void)
394 {
395         ignore_blacklist = true;
396 }
397
398 static void __init acpi_sleep_dmi_check(void)
399 {
400         if (ignore_blacklist)
401                 return;
402
403         if (dmi_get_bios_year() >= 2012)
404                 acpi_nvs_nosave_s3();
405
406         dmi_check_system(acpisleep_dmi_table);
407 }
408
409 /**
410  * acpi_pm_freeze - Disable the GPEs and suspend EC transactions.
411  */
412 static int acpi_pm_freeze(void)
413 {
414         acpi_disable_all_gpes();
415         acpi_os_wait_events_complete();
416         acpi_ec_block_transactions();
417         return 0;
418 }
419
420 /**
421  * acpi_pre_suspend - Enable wakeup devices, "freeze" EC and save NVS.
422  */
423 static int acpi_pm_pre_suspend(void)
424 {
425         acpi_pm_freeze();
426         return suspend_nvs_save();
427 }
428
429 /**
430  *      __acpi_pm_prepare - Prepare the platform to enter the target state.
431  *
432  *      If necessary, set the firmware waking vector and do arch-specific
433  *      nastiness to get the wakeup code to the waking vector.
434  */
435 static int __acpi_pm_prepare(void)
436 {
437         int error = acpi_sleep_prepare(acpi_target_sleep_state);
438         if (error)
439                 acpi_target_sleep_state = ACPI_STATE_S0;
440
441         return error;
442 }
443
444 /**
445  *      acpi_pm_prepare - Prepare the platform to enter the target sleep
446  *              state and disable the GPEs.
447  */
448 static int acpi_pm_prepare(void)
449 {
450         int error = __acpi_pm_prepare();
451         if (!error)
452                 error = acpi_pm_pre_suspend();
453
454         return error;
455 }
456
457 /**
458  *      acpi_pm_finish - Instruct the platform to leave a sleep state.
459  *
460  *      This is called after we wake back up (or if entering the sleep state
461  *      failed).
462  */
463 static void acpi_pm_finish(void)
464 {
465         struct acpi_device *pwr_btn_adev;
466         u32 acpi_state = acpi_target_sleep_state;
467
468         acpi_ec_unblock_transactions();
469         suspend_nvs_free();
470
471         if (acpi_state == ACPI_STATE_S0)
472                 return;
473
474         printk(KERN_INFO PREFIX "Waking up from system sleep state S%d\n",
475                 acpi_state);
476         acpi_disable_wakeup_devices(acpi_state);
477         acpi_leave_sleep_state(acpi_state);
478
479         /* reset firmware waking vector */
480         acpi_set_waking_vector(0);
481
482         acpi_target_sleep_state = ACPI_STATE_S0;
483
484         acpi_resume_power_resources();
485
486         /* If we were woken with the fixed power button, provide a small
487          * hint to userspace in the form of a wakeup event on the fixed power
488          * button device (if it can be found).
489          *
490          * We delay the event generation til now, as the PM layer requires
491          * timekeeping to be running before we generate events. */
492         if (!pwr_btn_event_pending)
493                 return;
494
495         pwr_btn_event_pending = false;
496         pwr_btn_adev = acpi_dev_get_first_match_dev(ACPI_BUTTON_HID_POWERF,
497                                                     NULL, -1);
498         if (pwr_btn_adev) {
499                 pm_wakeup_event(&pwr_btn_adev->dev, 0);
500                 acpi_dev_put(pwr_btn_adev);
501         }
502 }
503
504 /**
505  * acpi_pm_start - Start system PM transition.
506  */
507 static void acpi_pm_start(u32 acpi_state)
508 {
509         acpi_target_sleep_state = acpi_state;
510         acpi_sleep_tts_switch(acpi_target_sleep_state);
511         acpi_scan_lock_acquire();
512 }
513
514 /**
515  * acpi_pm_end - Finish up system PM transition.
516  */
517 static void acpi_pm_end(void)
518 {
519         acpi_turn_off_unused_power_resources();
520         acpi_scan_lock_release();
521         /*
522          * This is necessary in case acpi_pm_finish() is not called during a
523          * failing transition to a sleep state.
524          */
525         acpi_target_sleep_state = ACPI_STATE_S0;
526         acpi_sleep_tts_switch(acpi_target_sleep_state);
527 }
528 #else /* !CONFIG_ACPI_SLEEP */
529 #define sleep_no_lps0   (1)
530 #define acpi_target_sleep_state ACPI_STATE_S0
531 #define acpi_sleep_default_s3   (1)
532 static inline void acpi_sleep_dmi_check(void) {}
533 #endif /* CONFIG_ACPI_SLEEP */
534
535 #ifdef CONFIG_SUSPEND
536 static u32 acpi_suspend_states[] = {
537         [PM_SUSPEND_ON] = ACPI_STATE_S0,
538         [PM_SUSPEND_STANDBY] = ACPI_STATE_S1,
539         [PM_SUSPEND_MEM] = ACPI_STATE_S3,
540         [PM_SUSPEND_MAX] = ACPI_STATE_S5
541 };
542
543 /**
544  *      acpi_suspend_begin - Set the target system sleep state to the state
545  *              associated with given @pm_state, if supported.
546  */
547 static int acpi_suspend_begin(suspend_state_t pm_state)
548 {
549         u32 acpi_state = acpi_suspend_states[pm_state];
550         int error;
551
552         error = (nvs_nosave || nvs_nosave_s3) ? 0 : suspend_nvs_alloc();
553         if (error)
554                 return error;
555
556         if (!sleep_states[acpi_state]) {
557                 pr_err("ACPI does not support sleep state S%u\n", acpi_state);
558                 return -ENOSYS;
559         }
560         if (acpi_state > ACPI_STATE_S1)
561                 pm_set_suspend_via_firmware();
562
563         acpi_pm_start(acpi_state);
564         return 0;
565 }
566
567 /**
568  *      acpi_suspend_enter - Actually enter a sleep state.
569  *      @pm_state: ignored
570  *
571  *      Flush caches and go to sleep. For STR we have to call arch-specific
572  *      assembly, which in turn call acpi_enter_sleep_state().
573  *      It's unfortunate, but it works. Please fix if you're feeling frisky.
574  */
575 static int acpi_suspend_enter(suspend_state_t pm_state)
576 {
577         acpi_status status = AE_OK;
578         u32 acpi_state = acpi_target_sleep_state;
579         int error;
580
581         ACPI_FLUSH_CPU_CACHE();
582
583         trace_suspend_resume(TPS("acpi_suspend"), acpi_state, true);
584         switch (acpi_state) {
585         case ACPI_STATE_S1:
586                 barrier();
587                 status = acpi_enter_sleep_state(acpi_state);
588                 break;
589
590         case ACPI_STATE_S3:
591                 if (!acpi_suspend_lowlevel)
592                         return -ENOSYS;
593                 error = acpi_suspend_lowlevel();
594                 if (error)
595                         return error;
596                 pr_info(PREFIX "Low-level resume complete\n");
597                 pm_set_resume_via_firmware();
598                 break;
599         }
600         trace_suspend_resume(TPS("acpi_suspend"), acpi_state, false);
601
602         /* This violates the spec but is required for bug compatibility. */
603         acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1);
604
605         /* Reprogram control registers */
606         acpi_leave_sleep_state_prep(acpi_state);
607
608         /* ACPI 3.0 specs (P62) says that it's the responsibility
609          * of the OSPM to clear the status bit [ implying that the
610          * POWER_BUTTON event should not reach userspace ]
611          *
612          * However, we do generate a small hint for userspace in the form of
613          * a wakeup event. We flag this condition for now and generate the
614          * event later, as we're currently too early in resume to be able to
615          * generate wakeup events.
616          */
617         if (ACPI_SUCCESS(status) && (acpi_state == ACPI_STATE_S3)) {
618                 acpi_event_status pwr_btn_status = ACPI_EVENT_FLAG_DISABLED;
619
620                 acpi_get_event_status(ACPI_EVENT_POWER_BUTTON, &pwr_btn_status);
621
622                 if (pwr_btn_status & ACPI_EVENT_FLAG_STATUS_SET) {
623                         acpi_clear_event(ACPI_EVENT_POWER_BUTTON);
624                         /* Flag for later */
625                         pwr_btn_event_pending = true;
626                 }
627         }
628
629         /*
630          * Disable and clear GPE status before interrupt is enabled. Some GPEs
631          * (like wakeup GPE) haven't handler, this can avoid such GPE misfire.
632          * acpi_leave_sleep_state will reenable specific GPEs later
633          */
634         acpi_disable_all_gpes();
635         /* Allow EC transactions to happen. */
636         acpi_ec_unblock_transactions();
637
638         suspend_nvs_restore();
639
640         return ACPI_SUCCESS(status) ? 0 : -EFAULT;
641 }
642
643 static int acpi_suspend_state_valid(suspend_state_t pm_state)
644 {
645         u32 acpi_state;
646
647         switch (pm_state) {
648         case PM_SUSPEND_ON:
649         case PM_SUSPEND_STANDBY:
650         case PM_SUSPEND_MEM:
651                 acpi_state = acpi_suspend_states[pm_state];
652
653                 return sleep_states[acpi_state];
654         default:
655                 return 0;
656         }
657 }
658
659 static const struct platform_suspend_ops acpi_suspend_ops = {
660         .valid = acpi_suspend_state_valid,
661         .begin = acpi_suspend_begin,
662         .prepare_late = acpi_pm_prepare,
663         .enter = acpi_suspend_enter,
664         .wake = acpi_pm_finish,
665         .end = acpi_pm_end,
666 };
667
668 /**
669  *      acpi_suspend_begin_old - Set the target system sleep state to the
670  *              state associated with given @pm_state, if supported, and
671  *              execute the _PTS control method.  This function is used if the
672  *              pre-ACPI 2.0 suspend ordering has been requested.
673  */
674 static int acpi_suspend_begin_old(suspend_state_t pm_state)
675 {
676         int error = acpi_suspend_begin(pm_state);
677         if (!error)
678                 error = __acpi_pm_prepare();
679
680         return error;
681 }
682
683 /*
684  * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has
685  * been requested.
686  */
687 static const struct platform_suspend_ops acpi_suspend_ops_old = {
688         .valid = acpi_suspend_state_valid,
689         .begin = acpi_suspend_begin_old,
690         .prepare_late = acpi_pm_pre_suspend,
691         .enter = acpi_suspend_enter,
692         .wake = acpi_pm_finish,
693         .end = acpi_pm_end,
694         .recover = acpi_pm_finish,
695 };
696
697 static bool s2idle_wakeup;
698
699 /*
700  * On platforms supporting the Low Power S0 Idle interface there is an ACPI
701  * device object with the PNP0D80 compatible device ID (System Power Management
702  * Controller) and a specific _DSM method under it.  That method, if present,
703  * can be used to indicate to the platform that the OS is transitioning into a
704  * low-power state in which certain types of activity are not desirable or that
705  * it is leaving such a state, which allows the platform to adjust its operation
706  * mode accordingly.
707  */
708 static const struct acpi_device_id lps0_device_ids[] = {
709         {"PNP0D80", },
710         {"", },
711 };
712
713 #define ACPI_LPS0_DSM_UUID      "c4eb40a0-6cd2-11e2-bcfd-0800200c9a66"
714
715 #define ACPI_LPS0_GET_DEVICE_CONSTRAINTS        1
716 #define ACPI_LPS0_SCREEN_OFF    3
717 #define ACPI_LPS0_SCREEN_ON     4
718 #define ACPI_LPS0_ENTRY         5
719 #define ACPI_LPS0_EXIT          6
720
721 static acpi_handle lps0_device_handle;
722 static guid_t lps0_dsm_guid;
723 static char lps0_dsm_func_mask;
724
725 /* Device constraint entry structure */
726 struct lpi_device_info {
727         char *name;
728         int enabled;
729         union acpi_object *package;
730 };
731
732 /* Constraint package structure */
733 struct lpi_device_constraint {
734         int uid;
735         int min_dstate;
736         int function_states;
737 };
738
739 struct lpi_constraints {
740         acpi_handle handle;
741         int min_dstate;
742 };
743
744 static struct lpi_constraints *lpi_constraints_table;
745 static int lpi_constraints_table_size;
746
747 static void lpi_device_get_constraints(void)
748 {
749         union acpi_object *out_obj;
750         int i;
751
752         out_obj = acpi_evaluate_dsm_typed(lps0_device_handle, &lps0_dsm_guid,
753                                           1, ACPI_LPS0_GET_DEVICE_CONSTRAINTS,
754                                           NULL, ACPI_TYPE_PACKAGE);
755
756         acpi_handle_debug(lps0_device_handle, "_DSM function 1 eval %s\n",
757                           out_obj ? "successful" : "failed");
758
759         if (!out_obj)
760                 return;
761
762         lpi_constraints_table = kcalloc(out_obj->package.count,
763                                         sizeof(*lpi_constraints_table),
764                                         GFP_KERNEL);
765         if (!lpi_constraints_table)
766                 goto free_acpi_buffer;
767
768         acpi_handle_debug(lps0_device_handle, "LPI: constraints list begin:\n");
769
770         for (i = 0; i < out_obj->package.count; i++) {
771                 struct lpi_constraints *constraint;
772                 acpi_status status;
773                 union acpi_object *package = &out_obj->package.elements[i];
774                 struct lpi_device_info info = { };
775                 int package_count = 0, j;
776
777                 if (!package)
778                         continue;
779
780                 for (j = 0; j < package->package.count; ++j) {
781                         union acpi_object *element =
782                                         &(package->package.elements[j]);
783
784                         switch (element->type) {
785                         case ACPI_TYPE_INTEGER:
786                                 info.enabled = element->integer.value;
787                                 break;
788                         case ACPI_TYPE_STRING:
789                                 info.name = element->string.pointer;
790                                 break;
791                         case ACPI_TYPE_PACKAGE:
792                                 package_count = element->package.count;
793                                 info.package = element->package.elements;
794                                 break;
795                         }
796                 }
797
798                 if (!info.enabled || !info.package || !info.name)
799                         continue;
800
801                 constraint = &lpi_constraints_table[lpi_constraints_table_size];
802
803                 status = acpi_get_handle(NULL, info.name, &constraint->handle);
804                 if (ACPI_FAILURE(status))
805                         continue;
806
807                 acpi_handle_debug(lps0_device_handle,
808                                   "index:%d Name:%s\n", i, info.name);
809
810                 constraint->min_dstate = -1;
811
812                 for (j = 0; j < package_count; ++j) {
813                         union acpi_object *info_obj = &info.package[j];
814                         union acpi_object *cnstr_pkg;
815                         union acpi_object *obj;
816                         struct lpi_device_constraint dev_info;
817
818                         switch (info_obj->type) {
819                         case ACPI_TYPE_INTEGER:
820                                 /* version */
821                                 break;
822                         case ACPI_TYPE_PACKAGE:
823                                 if (info_obj->package.count < 2)
824                                         break;
825
826                                 cnstr_pkg = info_obj->package.elements;
827                                 obj = &cnstr_pkg[0];
828                                 dev_info.uid = obj->integer.value;
829                                 obj = &cnstr_pkg[1];
830                                 dev_info.min_dstate = obj->integer.value;
831
832                                 acpi_handle_debug(lps0_device_handle,
833                                         "uid:%d min_dstate:%s\n",
834                                         dev_info.uid,
835                                         acpi_power_state_string(dev_info.min_dstate));
836
837                                 constraint->min_dstate = dev_info.min_dstate;
838                                 break;
839                         }
840                 }
841
842                 if (constraint->min_dstate < 0) {
843                         acpi_handle_debug(lps0_device_handle,
844                                           "Incomplete constraint defined\n");
845                         continue;
846                 }
847
848                 lpi_constraints_table_size++;
849         }
850
851         acpi_handle_debug(lps0_device_handle, "LPI: constraints list end\n");
852
853 free_acpi_buffer:
854         ACPI_FREE(out_obj);
855 }
856
857 static void lpi_check_constraints(void)
858 {
859         int i;
860
861         for (i = 0; i < lpi_constraints_table_size; ++i) {
862                 acpi_handle handle = lpi_constraints_table[i].handle;
863                 struct acpi_device *adev;
864
865                 if (!handle || acpi_bus_get_device(handle, &adev))
866                         continue;
867
868                 acpi_handle_debug(handle,
869                         "LPI: required min power state:%s current power state:%s\n",
870                         acpi_power_state_string(lpi_constraints_table[i].min_dstate),
871                         acpi_power_state_string(adev->power.state));
872
873                 if (!adev->flags.power_manageable) {
874                         acpi_handle_info(handle, "LPI: Device not power manageable\n");
875                         lpi_constraints_table[i].handle = NULL;
876                         continue;
877                 }
878
879                 if (adev->power.state < lpi_constraints_table[i].min_dstate)
880                         acpi_handle_info(handle,
881                                 "LPI: Constraint not met; min power state:%s current power state:%s\n",
882                                 acpi_power_state_string(lpi_constraints_table[i].min_dstate),
883                                 acpi_power_state_string(adev->power.state));
884         }
885 }
886
887 static void acpi_sleep_run_lps0_dsm(unsigned int func)
888 {
889         union acpi_object *out_obj;
890
891         if (!(lps0_dsm_func_mask & (1 << func)))
892                 return;
893
894         out_obj = acpi_evaluate_dsm(lps0_device_handle, &lps0_dsm_guid, 1, func, NULL);
895         ACPI_FREE(out_obj);
896
897         acpi_handle_debug(lps0_device_handle, "_DSM function %u evaluation %s\n",
898                           func, out_obj ? "successful" : "failed");
899 }
900
901 static int lps0_device_attach(struct acpi_device *adev,
902                               const struct acpi_device_id *not_used)
903 {
904         union acpi_object *out_obj;
905
906         if (lps0_device_handle)
907                 return 0;
908
909         if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0))
910                 return 0;
911
912         guid_parse(ACPI_LPS0_DSM_UUID, &lps0_dsm_guid);
913         /* Check if the _DSM is present and as expected. */
914         out_obj = acpi_evaluate_dsm(adev->handle, &lps0_dsm_guid, 1, 0, NULL);
915         if (!out_obj || out_obj->type != ACPI_TYPE_BUFFER) {
916                 acpi_handle_debug(adev->handle,
917                                   "_DSM function 0 evaluation failed\n");
918                 return 0;
919         }
920
921         lps0_dsm_func_mask = *(char *)out_obj->buffer.pointer;
922
923         ACPI_FREE(out_obj);
924
925         acpi_handle_debug(adev->handle, "_DSM function mask: 0x%x\n",
926                           lps0_dsm_func_mask);
927
928         lps0_device_handle = adev->handle;
929
930         lpi_device_get_constraints();
931
932         /*
933          * Use suspend-to-idle by default if the default suspend mode was not
934          * set from the command line.
935          */
936         if (mem_sleep_default > PM_SUSPEND_MEM && !acpi_sleep_default_s3)
937                 mem_sleep_current = PM_SUSPEND_TO_IDLE;
938
939         /*
940          * Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the
941          * EC GPE to be enabled while suspended for certain wakeup devices to
942          * work, so mark it as wakeup-capable.
943          */
944         acpi_ec_mark_gpe_for_wake();
945
946         return 0;
947 }
948
949 static struct acpi_scan_handler lps0_handler = {
950         .ids = lps0_device_ids,
951         .attach = lps0_device_attach,
952 };
953
954 static int acpi_s2idle_begin(void)
955 {
956         acpi_scan_lock_acquire();
957         return 0;
958 }
959
960 static int acpi_s2idle_prepare(void)
961 {
962         if (acpi_sci_irq_valid()) {
963                 enable_irq_wake(acpi_sci_irq);
964                 acpi_ec_set_gpe_wake_mask(ACPI_GPE_ENABLE);
965         }
966
967         acpi_enable_wakeup_devices(ACPI_STATE_S0);
968
969         /* Change the configuration of GPEs to avoid spurious wakeup. */
970         acpi_enable_all_wakeup_gpes();
971         acpi_os_wait_events_complete();
972
973         s2idle_wakeup = true;
974         return 0;
975 }
976
977 static int acpi_s2idle_prepare_late(void)
978 {
979         if (!lps0_device_handle || sleep_no_lps0)
980                 return 0;
981
982         if (pm_debug_messages_on)
983                 lpi_check_constraints();
984
985         acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF);
986         acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY);
987
988         return 0;
989 }
990
991 static bool acpi_s2idle_wake(void)
992 {
993         if (!acpi_sci_irq_valid())
994                 return pm_wakeup_pending();
995
996         while (pm_wakeup_pending()) {
997                 /*
998                  * If IRQD_WAKEUP_ARMED is set for the SCI at this point, the
999                  * SCI has not triggered while suspended, so bail out (the
1000                  * wakeup is pending anyway and the SCI is not the source of
1001                  * it).
1002                  */
1003                 if (irqd_is_wakeup_armed(irq_get_irq_data(acpi_sci_irq))) {
1004                         pm_pr_dbg("Wakeup unrelated to ACPI SCI\n");
1005                         return true;
1006                 }
1007
1008                 /*
1009                  * If the status bit of any enabled fixed event is set, the
1010                  * wakeup is regarded as valid.
1011                  */
1012                 if (acpi_any_fixed_event_status_set()) {
1013                         pm_pr_dbg("ACPI fixed event wakeup\n");
1014                         return true;
1015                 }
1016
1017                 /* Check wakeups from drivers sharing the SCI. */
1018                 if (acpi_check_wakeup_handlers()) {
1019                         pm_pr_dbg("ACPI custom handler wakeup\n");
1020                         return true;
1021                 }
1022
1023                 /* Check non-EC GPE wakeups and dispatch the EC GPE. */
1024                 if (acpi_ec_dispatch_gpe()) {
1025                         pm_pr_dbg("ACPI non-EC GPE wakeup\n");
1026                         return true;
1027                 }
1028
1029                 /*
1030                  * Cancel the SCI wakeup and process all pending events in case
1031                  * there are any wakeup ones in there.
1032                  *
1033                  * Note that if any non-EC GPEs are active at this point, the
1034                  * SCI will retrigger after the rearming below, so no events
1035                  * should be missed by canceling the wakeup here.
1036                  */
1037                 pm_system_cancel_wakeup();
1038                 acpi_os_wait_events_complete();
1039
1040                 /*
1041                  * The SCI is in the "suspended" state now and it cannot produce
1042                  * new wakeup events till the rearming below, so if any of them
1043                  * are pending here, they must be resulting from the processing
1044                  * of EC events above or coming from somewhere else.
1045                  */
1046                 if (pm_wakeup_pending()) {
1047                         pm_pr_dbg("Wakeup after ACPI Notify sync\n");
1048                         return true;
1049                 }
1050
1051                 pm_wakeup_clear(acpi_sci_irq);
1052                 rearm_wake_irq(acpi_sci_irq);
1053         }
1054
1055         return false;
1056 }
1057
1058 static void acpi_s2idle_restore_early(void)
1059 {
1060         if (!lps0_device_handle || sleep_no_lps0)
1061                 return;
1062
1063         acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT);
1064         acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON);
1065 }
1066
1067 static void acpi_s2idle_restore(void)
1068 {
1069         /*
1070          * Drain pending events before restoring the working-state configuration
1071          * of GPEs.
1072          */
1073         acpi_os_wait_events_complete(); /* synchronize GPE processing */
1074         acpi_ec_flush_work(); /* flush the EC driver's workqueues */
1075         acpi_os_wait_events_complete(); /* synchronize Notify handling */
1076
1077         s2idle_wakeup = false;
1078
1079         acpi_enable_all_runtime_gpes();
1080
1081         acpi_disable_wakeup_devices(ACPI_STATE_S0);
1082
1083         if (acpi_sci_irq_valid()) {
1084                 acpi_ec_set_gpe_wake_mask(ACPI_GPE_DISABLE);
1085                 disable_irq_wake(acpi_sci_irq);
1086         }
1087 }
1088
1089 static void acpi_s2idle_end(void)
1090 {
1091         acpi_scan_lock_release();
1092 }
1093
1094 static const struct platform_s2idle_ops acpi_s2idle_ops = {
1095         .begin = acpi_s2idle_begin,
1096         .prepare = acpi_s2idle_prepare,
1097         .prepare_late = acpi_s2idle_prepare_late,
1098         .wake = acpi_s2idle_wake,
1099         .restore_early = acpi_s2idle_restore_early,
1100         .restore = acpi_s2idle_restore,
1101         .end = acpi_s2idle_end,
1102 };
1103
1104 static void acpi_sleep_suspend_setup(void)
1105 {
1106         int i;
1107
1108         for (i = ACPI_STATE_S1; i < ACPI_STATE_S4; i++)
1109                 if (acpi_sleep_state_supported(i))
1110                         sleep_states[i] = 1;
1111
1112         suspend_set_ops(old_suspend_ordering ?
1113                 &acpi_suspend_ops_old : &acpi_suspend_ops);
1114
1115         acpi_scan_add_handler(&lps0_handler);
1116         s2idle_set_ops(&acpi_s2idle_ops);
1117 }
1118
1119 #else /* !CONFIG_SUSPEND */
1120 #define s2idle_wakeup           (false)
1121 #define lps0_device_handle      (NULL)
1122 static inline void acpi_sleep_suspend_setup(void) {}
1123 #endif /* !CONFIG_SUSPEND */
1124
1125 bool acpi_s2idle_wakeup(void)
1126 {
1127         return s2idle_wakeup;
1128 }
1129
1130 #ifdef CONFIG_PM_SLEEP
1131 static u32 saved_bm_rld;
1132
1133 static int  acpi_save_bm_rld(void)
1134 {
1135         acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld);
1136         return 0;
1137 }
1138
1139 static void  acpi_restore_bm_rld(void)
1140 {
1141         u32 resumed_bm_rld = 0;
1142
1143         acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld);
1144         if (resumed_bm_rld == saved_bm_rld)
1145                 return;
1146
1147         acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld);
1148 }
1149
1150 static struct syscore_ops acpi_sleep_syscore_ops = {
1151         .suspend = acpi_save_bm_rld,
1152         .resume = acpi_restore_bm_rld,
1153 };
1154
1155 static void acpi_sleep_syscore_init(void)
1156 {
1157         register_syscore_ops(&acpi_sleep_syscore_ops);
1158 }
1159 #else
1160 static inline void acpi_sleep_syscore_init(void) {}
1161 #endif /* CONFIG_PM_SLEEP */
1162
1163 #ifdef CONFIG_HIBERNATION
1164 static unsigned long s4_hardware_signature;
1165 static struct acpi_table_facs *facs;
1166 static bool nosigcheck;
1167
1168 void __init acpi_no_s4_hw_signature(void)
1169 {
1170         nosigcheck = true;
1171 }
1172
1173 static int acpi_hibernation_begin(pm_message_t stage)
1174 {
1175         if (!nvs_nosave) {
1176                 int error = suspend_nvs_alloc();
1177                 if (error)
1178                         return error;
1179         }
1180
1181         if (stage.event == PM_EVENT_HIBERNATE)
1182                 pm_set_suspend_via_firmware();
1183
1184         acpi_pm_start(ACPI_STATE_S4);
1185         return 0;
1186 }
1187
1188 static int acpi_hibernation_enter(void)
1189 {
1190         acpi_status status = AE_OK;
1191
1192         ACPI_FLUSH_CPU_CACHE();
1193
1194         /* This shouldn't return.  If it returns, we have a problem */
1195         status = acpi_enter_sleep_state(ACPI_STATE_S4);
1196         /* Reprogram control registers */
1197         acpi_leave_sleep_state_prep(ACPI_STATE_S4);
1198
1199         return ACPI_SUCCESS(status) ? 0 : -EFAULT;
1200 }
1201
1202 static void acpi_hibernation_leave(void)
1203 {
1204         pm_set_resume_via_firmware();
1205         /*
1206          * If ACPI is not enabled by the BIOS and the boot kernel, we need to
1207          * enable it here.
1208          */
1209         acpi_enable();
1210         /* Reprogram control registers */
1211         acpi_leave_sleep_state_prep(ACPI_STATE_S4);
1212         /* Check the hardware signature */
1213         if (facs && s4_hardware_signature != facs->hardware_signature)
1214                 pr_crit("ACPI: Hardware changed while hibernated, success doubtful!\n");
1215         /* Restore the NVS memory area */
1216         suspend_nvs_restore();
1217         /* Allow EC transactions to happen. */
1218         acpi_ec_unblock_transactions();
1219 }
1220
1221 static void acpi_pm_thaw(void)
1222 {
1223         acpi_ec_unblock_transactions();
1224         acpi_enable_all_runtime_gpes();
1225 }
1226
1227 static const struct platform_hibernation_ops acpi_hibernation_ops = {
1228         .begin = acpi_hibernation_begin,
1229         .end = acpi_pm_end,
1230         .pre_snapshot = acpi_pm_prepare,
1231         .finish = acpi_pm_finish,
1232         .prepare = acpi_pm_prepare,
1233         .enter = acpi_hibernation_enter,
1234         .leave = acpi_hibernation_leave,
1235         .pre_restore = acpi_pm_freeze,
1236         .restore_cleanup = acpi_pm_thaw,
1237 };
1238
1239 /**
1240  *      acpi_hibernation_begin_old - Set the target system sleep state to
1241  *              ACPI_STATE_S4 and execute the _PTS control method.  This
1242  *              function is used if the pre-ACPI 2.0 suspend ordering has been
1243  *              requested.
1244  */
1245 static int acpi_hibernation_begin_old(pm_message_t stage)
1246 {
1247         int error;
1248         /*
1249          * The _TTS object should always be evaluated before the _PTS object.
1250          * When the old_suspended_ordering is true, the _PTS object is
1251          * evaluated in the acpi_sleep_prepare.
1252          */
1253         acpi_sleep_tts_switch(ACPI_STATE_S4);
1254
1255         error = acpi_sleep_prepare(ACPI_STATE_S4);
1256         if (error)
1257                 return error;
1258
1259         if (!nvs_nosave) {
1260                 error = suspend_nvs_alloc();
1261                 if (error)
1262                         return error;
1263         }
1264
1265         if (stage.event == PM_EVENT_HIBERNATE)
1266                 pm_set_suspend_via_firmware();
1267
1268         acpi_target_sleep_state = ACPI_STATE_S4;
1269         acpi_scan_lock_acquire();
1270         return 0;
1271 }
1272
1273 /*
1274  * The following callbacks are used if the pre-ACPI 2.0 suspend ordering has
1275  * been requested.
1276  */
1277 static const struct platform_hibernation_ops acpi_hibernation_ops_old = {
1278         .begin = acpi_hibernation_begin_old,
1279         .end = acpi_pm_end,
1280         .pre_snapshot = acpi_pm_pre_suspend,
1281         .prepare = acpi_pm_freeze,
1282         .finish = acpi_pm_finish,
1283         .enter = acpi_hibernation_enter,
1284         .leave = acpi_hibernation_leave,
1285         .pre_restore = acpi_pm_freeze,
1286         .restore_cleanup = acpi_pm_thaw,
1287         .recover = acpi_pm_finish,
1288 };
1289
1290 static void acpi_sleep_hibernate_setup(void)
1291 {
1292         if (!acpi_sleep_state_supported(ACPI_STATE_S4))
1293                 return;
1294
1295         hibernation_set_ops(old_suspend_ordering ?
1296                         &acpi_hibernation_ops_old : &acpi_hibernation_ops);
1297         sleep_states[ACPI_STATE_S4] = 1;
1298         if (nosigcheck)
1299                 return;
1300
1301         acpi_get_table(ACPI_SIG_FACS, 1, (struct acpi_table_header **)&facs);
1302         if (facs)
1303                 s4_hardware_signature = facs->hardware_signature;
1304 }
1305 #else /* !CONFIG_HIBERNATION */
1306 static inline void acpi_sleep_hibernate_setup(void) {}
1307 #endif /* !CONFIG_HIBERNATION */
1308
1309 static void acpi_power_off_prepare(void)
1310 {
1311         /* Prepare to power off the system */
1312         acpi_sleep_prepare(ACPI_STATE_S5);
1313         acpi_disable_all_gpes();
1314         acpi_os_wait_events_complete();
1315 }
1316
1317 static void acpi_power_off(void)
1318 {
1319         /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
1320         printk(KERN_DEBUG "%s called\n", __func__);
1321         local_irq_disable();
1322         acpi_enter_sleep_state(ACPI_STATE_S5);
1323 }
1324
1325 int __init acpi_sleep_init(void)
1326 {
1327         char supported[ACPI_S_STATE_COUNT * 3 + 1];
1328         char *pos = supported;
1329         int i;
1330
1331         acpi_sleep_dmi_check();
1332
1333         sleep_states[ACPI_STATE_S0] = 1;
1334
1335         acpi_sleep_syscore_init();
1336         acpi_sleep_suspend_setup();
1337         acpi_sleep_hibernate_setup();
1338
1339         if (acpi_sleep_state_supported(ACPI_STATE_S5)) {
1340                 sleep_states[ACPI_STATE_S5] = 1;
1341                 pm_power_off_prepare = acpi_power_off_prepare;
1342                 pm_power_off = acpi_power_off;
1343         } else {
1344                 acpi_no_s5 = true;
1345         }
1346
1347         supported[0] = 0;
1348         for (i = 0; i < ACPI_S_STATE_COUNT; i++) {
1349                 if (sleep_states[i])
1350                         pos += sprintf(pos, " S%d", i);
1351         }
1352         pr_info(PREFIX "(supports%s)\n", supported);
1353
1354         /*
1355          * Register the tts_notifier to reboot notifier list so that the _TTS
1356          * object can also be evaluated when the system enters S5.
1357          */
1358         register_reboot_notifier(&tts_notifier);
1359         return 0;
1360 }