msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
+static void __init halibut_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)")
        .atag_offset    = 0x100,
        .fixup          = halibut_fixup,
        .init_early     = halibut_init_early,
        .init_irq       = halibut_init_irq,
        .init_machine   = halibut_init,
+       .init_late      = halibut_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        msm_clock_init();
 }
 
+static void __init mahimahi_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 extern struct sys_timer msm_timer;
 
 MACHINE_START(MAHIMAHI, "mahimahi")
        .map_io         = mahimahi_map_io,
        .init_irq       = msm_init_irq,
        .init_machine   = mahimahi_init,
+       .init_late      = mahimahi_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
 #endif
 }
 
+static void __init msm7x2x_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(MSM7X27_SURF, "QCT MSM7x27 SURF")
        .atag_offset    = 0x100,
        .map_io         = msm7x2x_map_io,
        .init_irq       = msm7x2x_init_irq,
        .init_machine   = msm7x2x_init,
+       .init_late      = msm7x2x_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        .map_io         = msm7x2x_map_io,
        .init_irq       = msm7x2x_init_irq,
        .init_machine   = msm7x2x_init,
+       .init_late      = msm7x2x_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        .map_io         = msm7x2x_map_io,
        .init_irq       = msm7x2x_init_irq,
        .init_machine   = msm7x2x_init,
+       .init_late      = msm7x2x_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        .map_io         = msm7x2x_map_io,
        .init_irq       = msm7x2x_init_irq,
        .init_machine   = msm7x2x_init,
+       .init_late      = msm7x2x_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        msm_clock_init(msm_clocks_7x30, msm_num_clocks_7x30);
 }
 
+static void __init msm7x30_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
        .atag_offset = 0x100,
        .fixup = msm7x30_fixup,
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,
+       .init_late = msm7x30_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,
+       .init_late = msm7x30_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .map_io = msm7x30_map_io,
        .init_irq = msm7x30_init_irq,
        .init_machine = msm7x30_init,
+       .init_late = msm7x30_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        platform_add_devices(rumi3_devices, ARRAY_SIZE(rumi3_devices));
 }
 
+static void __init msm8960_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(MSM8960_SIM, "QCT MSM8960 SIMULATOR")
        .fixup = msm8960_fixup,
        .reserve = msm8960_reserve,
        .timer = &msm_timer,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8960_sim_init,
+       .init_late = msm8960_init_late,
 MACHINE_END
 
 MACHINE_START(MSM8960_RUMI3, "QCT MSM8960 RUMI3")
        .timer = &msm_timer,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8960_rumi3_init,
+       .init_late = msm8960_init_late,
 MACHINE_END
 
 
 {
 }
 
+static void __init msm8x60_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 #ifdef CONFIG_OF
 static struct of_dev_auxdata msm_auxdata_lookup[] __initdata = {
        {}
        .init_irq = msm8x60_init_irq,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8x60_init,
+       .init_late = msm8x60_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .init_irq = msm8x60_init_irq,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8x60_init,
+       .init_late = msm8x60_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .init_irq = msm8x60_init_irq,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8x60_init,
+       .init_late = msm8x60_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .init_irq = msm8x60_init_irq,
        .handle_irq = gic_handle_irq,
        .init_machine = msm8x60_init,
+       .init_late = msm8x60_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .map_io = msm8x60_map_io,
        .init_irq = msm8x60_init_irq,
        .init_machine = msm8x60_dt_init,
+       .init_late = msm8x60_init_late,
        .timer = &msm_timer,
        .dt_compat = msm8x60_fluid_match,
 MACHINE_END
 
        qsd8x50_init_mmc();
 }
 
+static void __init qsd8x50_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF")
        .atag_offset = 0x100,
        .map_io = qsd8x50_map_io,
        .init_irq = qsd8x50_init_irq,
        .init_machine = qsd8x50_init,
+       .init_late = qsd8x50_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        .map_io = qsd8x50_map_io,
        .init_irq = qsd8x50_init_irq,
        .init_machine = qsd8x50_init,
+       .init_late = qsd8x50_init_late,
        .timer = &msm_timer,
 MACHINE_END
 
        msm_clock_init();
 }
 
+static void __init sapphire_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(SAPPHIRE, "sapphire")
 /* Maintainer: Brian Swetland <swetland@google.com> */
        .atag_offset    = 0x100,
        .map_io         = sapphire_map_io,
        .init_irq       = sapphire_init_irq,
        .init_machine   = sapphire_init,
+       .init_late      = sapphire_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
        msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
+static void __init trout_init_late(void)
+{
+       smd_debugfs_init();
+}
+
 MACHINE_START(TROUT, "HTC Dream")
        .atag_offset    = 0x100,
        .fixup          = trout_fixup,
        .init_early     = trout_init_early,
        .init_irq       = trout_init_irq,
        .init_machine   = trout_init,
+       .init_late      = trout_init_late,
        .timer          = &msm_timer,
 MACHINE_END
 
                        struct msm_mmc_platform_data *plat,
                        unsigned int stat_irq, unsigned long stat_irq_flags);
 
+#if defined(CONFIG_MSM_SMD) && defined(CONFIG_DEBUG_FS)
+int smd_debugfs_init(void);
+#else
+static inline int smd_debugfs_init(void) { return 0; }
+#endif
+
 #endif
 
        debugfs_create_file(name, mode, dent, fill, &debug_ops);
 }
 
-static int smd_debugfs_init(void)
+int __init smd_debugfs_init(void)
 {
        struct dentry *dent;
 
        return 0;
 }
 
-late_initcall(smd_debugfs_init);
 #endif