* Dependent on link order - so the assumption is that vfp_init is called
  * before us.
  */
-static int __init mx51_neon_fixup(void)
+int __init mx51_neon_fixup(void)
 {
-       if (!cpu_is_mx51())
-               return 0;
-
        if (mx51_revision() < IMX_CHIP_REVISION_3_0 &&
                        (elf_hwcap & HWCAP_NEON)) {
                elf_hwcap &= ~HWCAP_NEON;
        return 0;
 }
 
-late_initcall(mx51_neon_fixup);
 #endif
 
 static int get_mx53_srev(void)
 
        .handle_irq     = imx51_handle_irq,
        .timer          = &imx51_timer,
        .init_machine   = imx51_dt_init,
+       .init_late      = imx51_init_late,
        .dt_compat      = imx51_dt_board_compat,
        .restart        = mxc_restart,
 MACHINE_END
 
        .handle_irq = imx51_handle_irq,
        .timer = &mxc_timer,
        .init_machine = eukrea_cpuimx51_init,
+       .init_late      = imx51_init_late,
        .restart        = mxc_restart,
 MACHINE_END
 
        .handle_irq = imx51_handle_irq,
        .timer = &mxc_timer,
        .init_machine = eukrea_cpuimx51sd_init,
+       .init_late      = imx51_init_late,
        .restart        = mxc_restart,
 MACHINE_END
 
        .handle_irq = imx51_handle_irq,
        .timer = &mx51_3ds_timer,
        .init_machine = mx51_3ds_init,
+       .init_late      = imx51_init_late,
        .restart        = mxc_restart,
 MACHINE_END
 
        .handle_irq = imx51_handle_irq,
        .timer = &mx51_babbage_timer,
        .init_machine = mx51_babbage_init,
+       .init_late      = imx51_init_late,
        .restart        = mxc_restart,
 MACHINE_END
 
 
 static int __init mx51_efikamx_power_init(void)
 {
-       if (machine_is_mx51_efikamx()) {
-               pwgt1 = regulator_get(NULL, "pwgt1");
-               pwgt2 = regulator_get(NULL, "pwgt2");
-               if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
-                       regulator_enable(pwgt1);
-                       regulator_enable(pwgt2);
-               }
-               gpio_request(EFIKAMX_POWEROFF, "poweroff");
-               pm_power_off = mx51_efikamx_power_off;
-
-               /* enable coincell charger. maybe need a small power driver ? */
-               coincell = regulator_get(NULL, "coincell");
-               if (!IS_ERR(coincell)) {
-                       regulator_set_voltage(coincell, 3000000, 3000000);
-                       regulator_enable(coincell);
-               }
-
-               regulator_has_full_constraints();
+       pwgt1 = regulator_get(NULL, "pwgt1");
+       pwgt2 = regulator_get(NULL, "pwgt2");
+       if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
+               regulator_enable(pwgt1);
+               regulator_enable(pwgt2);
+       }
+       gpio_request(EFIKAMX_POWEROFF, "poweroff");
+       pm_power_off = mx51_efikamx_power_off;
+
+       /* enable coincell charger. maybe need a small power driver ? */
+       coincell = regulator_get(NULL, "coincell");
+       if (!IS_ERR(coincell)) {
+               regulator_set_voltage(coincell, 3000000, 3000000);
+               regulator_enable(coincell);
        }
 
+       regulator_has_full_constraints();
+
        return 0;
 }
-late_initcall(mx51_efikamx_power_init);
+
+static void __init mx51_efikamx_init_late(void)
+{
+       imx51_init_late();
+       mx51_efikamx_power_init();
+}
 
 static void __init mx51_efikamx_init(void)
 {
        .handle_irq = imx51_handle_irq,
        .timer = &mx51_efikamx_timer,
        .init_machine = mx51_efikamx_init,
+       .init_late = mx51_efikamx_init_late,
        .restart = mx51_efikamx_restart,
 MACHINE_END
 
 
 static int __init mx51_efikasb_power_init(void)
 {
-       if (machine_is_mx51_efikasb()) {
-               pwgt1 = regulator_get(NULL, "pwgt1");
-               pwgt2 = regulator_get(NULL, "pwgt2");
-               if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
-                       regulator_enable(pwgt1);
-                       regulator_enable(pwgt2);
-               }
-               gpio_request(EFIKASB_POWEROFF, "poweroff");
-               pm_power_off = mx51_efikasb_power_off;
-
-               regulator_has_full_constraints();
+       pwgt1 = regulator_get(NULL, "pwgt1");
+       pwgt2 = regulator_get(NULL, "pwgt2");
+       if (!IS_ERR(pwgt1) && !IS_ERR(pwgt2)) {
+               regulator_enable(pwgt1);
+               regulator_enable(pwgt2);
        }
+       gpio_request(EFIKASB_POWEROFF, "poweroff");
+       pm_power_off = mx51_efikasb_power_off;
+
+       regulator_has_full_constraints();
 
        return 0;
 }
-late_initcall(mx51_efikasb_power_init);
+
+static void __init mx51_efikasb_init_late(void)
+{
+       imx51_init_late();
+       mx51_efikasb_power_init();
+}
 
 /* 01     R1.3 board
    10     R2.0 board */
        .init_irq = mx51_init_irq,
        .handle_irq = imx51_handle_irq,
        .init_machine =  efikasb_board_init,
+       .init_late = mx51_efikasb_init_late,
        .timer = &mx51_efikasb_timer,
        .restart        = mxc_restart,
 MACHINE_END
 
                        MX3_CAMERA_BUF_SIZE);
 }
 
+static void __init pcm037_init_late(void)
+{
+       pcm037_eet_init_devices();
+}
+
 MACHINE_START(PCM037, "Phytec Phycore pcm037")
        /* Maintainer: Pengutronix */
        .atag_offset = 0x100,
        .handle_irq = imx31_handle_irq,
        .timer = &pcm037_timer,
        .init_machine = pcm037_init,
+       .init_late = pcm037_init_late,
        .restart        = mxc_restart,
 MACHINE_END
 
        .rep            = 0, /* No auto-repeat */
 };
 
-static int __init eet_init_devices(void)
+int __init pcm037_eet_init_devices(void)
 {
-       if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET)
+       if (pcm037_variant() != PCM037_EET)
                return 0;
 
        mxc_iomux_setup_multiple_pins(pcm037_eet_pins,
 
        return 0;
 }
-late_initcall(eet_init_devices);
 
        platform_device_register_simple("imx31-audmux", 0, imx53_audmux_res,
                                        ARRAY_SIZE(imx53_audmux_res));
 }
+
+void __init imx51_init_late(void)
+{
+       mx51_neon_fixup();
+}
 
 
 extern enum pcm037_board_variant pcm037_variant(void);
 
+#ifdef CONFIG_MACH_PCM037_EET
+int pcm037_eet_init_devices(void);
+#else
+static inline int pcm037_eet_init_devices(void) { return 0; }
+#endif
+
 #endif
 
 extern void imx50_soc_init(void);
 extern void imx51_soc_init(void);
 extern void imx53_soc_init(void);
+extern void imx51_init_late(void);
 extern void epit_timer_init(struct clk *timer_clk, void __iomem *base, int irq);
 extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int);
 extern int mx1_clocks_init(unsigned long fref);
 static inline void imx6q_pm_init(void) {}
 #endif
 
+#ifdef CONFIG_NEON
+extern int mx51_neon_fixup(void);
+#else
+static inline int mx51_neon_fixup(void) { return 0; }
+#endif
+
 #endif