diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
index 60e330cdbd1756481c89683bde6c8646cef81f3c..9693adbc280ccd56bb4aaa22f16b9a008cf80689 100644
--- a/arch/x86/kernel/apm_32.c
+++ b/arch/x86/kernel/apm_32.c
@@ -197,6 +197,7 @@
 #include <linux/module.h>
 
 #include <linux/poll.h>
+#include <linux/reboot.h>
 #include <linux/types.h>
 #include <linux/stddef.h>
 #include <linux/timer.h>
@@ -1843,7 +1844,7 @@ static int apm(void *unused)
 
 	/* Install our power off handler.. */
 	if (power_off)
-		pm_power_off = apm_power_off;
+		register_platform_power_off(apm_power_off);
 
 	if (num_online_cpus() == 1 || smp) {
 #if defined(CONFIG_APM_DISPLAY_BLANK) && defined(CONFIG_VT)
@@ -2406,7 +2407,7 @@ static void __exit apm_exit(void)
 	misc_deregister(&apm_device);
 	remove_proc_entry("apm", NULL);
 	if (power_off)
-		pm_power_off = NULL;
+		unregister_platform_power_off(apm_power_off);
 	if (kapmd_task) {
 		kthread_stop(kapmd_task);
 		kapmd_task = NULL;