extern void opal_platform_dump_init(void);
 extern void opal_sys_param_init(void);
 extern void opal_msglog_init(void);
+extern int opal_async_comp_init(void);
+extern int opal_sensor_init(void);
+extern int opal_hmi_handler_init(void);
 
 extern int opal_machine_check(struct pt_regs *regs);
 extern bool opal_mce_check_early_recovery(struct pt_regs *regs);
 
                .priority       = 0,
 };
 
-static int __init opal_async_comp_init(void)
+int __init opal_async_comp_init(void)
 {
        struct device_node *opal_node;
        const __be32 *async;
 out:
        return err;
 }
-machine_subsys_initcall(powernv, opal_async_comp_init);
 
        .priority       = 0,
 };
 
-static int __init opal_hmi_handler_init(void)
+int __init opal_hmi_handler_init(void)
 {
        int ret;
 
        }
        return 0;
 }
-machine_subsys_initcall(powernv, opal_hmi_handler_init);
 
        }
        return 0;
 }
-machine_subsys_initcall(powernv, opal_mem_err_init);
+machine_device_initcall(powernv, opal_mem_err_init);
 
 }
 EXPORT_SYMBOL_GPL(opal_get_sensor_data);
 
-static __init int opal_sensor_init(void)
+int __init opal_sensor_init(void)
 {
        struct platform_device *pdev;
        struct device_node *sensor;
 
        return PTR_ERR_OR_ZERO(pdev);
 }
-machine_subsys_initcall(powernv, opal_sensor_init);
 
        }
        return 0;
 }
-machine_early_initcall(powernv, opal_message_init);
 
 int opal_get_chars(uint32_t vtermno, char *buf, int count)
 {
                of_node_put(consoles);
        }
 
+       /* Initialise OPAL messaging system */
+       opal_message_init();
+
+       /* Initialise OPAL asynchronous completion interface */
+       opal_async_comp_init();
+
+       /* Initialise OPAL sensor interface */
+       opal_sensor_init();
+
+       /* Initialise OPAL hypervisor maintainence interrupt handling */
+       opal_hmi_handler_init();
+
        /* Create i2c platform devices */
        opal_i2c_create_devs();