diff options
Diffstat (limited to 'drivers/firmware')
-rw-r--r-- | drivers/firmware/efi/reboot.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/firmware/efi/reboot.c b/drivers/firmware/efi/reboot.c index 81bf925f70f5..e9eeeb3c6345 100644 --- a/drivers/firmware/efi/reboot.c +++ b/drivers/firmware/efi/reboot.c | |||
@@ -24,3 +24,25 @@ void efi_reboot(enum reboot_mode reboot_mode, const char *__unused) | |||
24 | 24 | ||
25 | efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL); | 25 | efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL); |
26 | } | 26 | } |
27 | |||
28 | bool __weak efi_poweroff_required(void) | ||
29 | { | ||
30 | return false; | ||
31 | } | ||
32 | |||
33 | static void efi_power_off(void) | ||
34 | { | ||
35 | efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL); | ||
36 | } | ||
37 | |||
38 | static int __init efi_shutdown_init(void) | ||
39 | { | ||
40 | if (!efi_enabled(EFI_RUNTIME_SERVICES)) | ||
41 | return -ENODEV; | ||
42 | |||
43 | if (efi_poweroff_required()) | ||
44 | pm_power_off = efi_power_off; | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | late_initcall(efi_shutdown_init); | ||