.init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = assabet_init,
+       .init_late      = sa11x0_init_late,
 #ifdef CONFIG_SA1111
        .dma_zone_size  = SZ_1M,
 #endif
 
        .map_io         = badge4_map_io,
        .nr_irqs        = SA1100_NR_IRQS,
        .init_irq       = sa1100_init_irq,
+       .init_late      = sa11x0_init_late,
        .timer          = &sa1100_timer,
 #ifdef CONFIG_SA1111
        .dma_zone_size  = SZ_1M,
 
        .init_irq       = cerf_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = cerf_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = collie_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
 
 arch_initcall(sa1100_init);
 
+void __init sa11x0_init_late(void)
+{
+       sa11x0_pm_init();
+}
 
 /*
  * Common I/O mapping:
 
 extern void __init sa1100_init_irq(void);
 extern void __init sa1100_init_gpio(void);
 extern void sa11x0_restart(char, const char *);
+extern void sa11x0_init_late(void);
 
 #define SET_BANK(__nr,__start,__size) \
        mi->bank[__nr].start = (__start), \
 
 struct sa1100fb_mach_info;
 void sa11x0_register_lcd(struct sa1100fb_mach_info *inf);
+
+#ifdef CONFIG_PM
+int sa11x0_pm_init(void);
+#else
+static inline int sa11x0_pm_init(void) { return 0; }
+#endif
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = h3100_mach_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = h3600_mach_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = hackkit_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = jornada720_mach_init,
+       .init_late      = sa11x0_init_late,
 #ifdef CONFIG_SA1111
        .dma_zone_size  = SZ_1M,
 #endif
 
        .nr_irqs        = SA1100_NR_IRQS,
        .init_irq       = sa1100_init_irq,
        .init_machine   = lart_init,
+       .init_late      = sa11x0_init_late,
        .timer          = &sa1100_timer,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = nanoengine_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = pleb_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .valid          = suspend_valid_only_mem,
 };
 
-static int __init sa11x0_pm_init(void)
+int __init sa11x0_pm_init(void)
 {
        suspend_set_ops(&sa11x0_pm_ops);
        return 0;
 }
-
-late_initcall(sa11x0_pm_init);
 
        .init_irq       = sa1100_init_irq,
        .timer          = &sa1100_timer,
        .init_machine   = shannon_init,
+       .init_late      = sa11x0_init_late,
        .restart        = sa11x0_restart,
 MACHINE_END
 
        .map_io         = simpad_map_io,
        .nr_irqs        = SA1100_NR_IRQS,
        .init_irq       = sa1100_init_irq,
+       .init_late      = sa11x0_init_late,
        .timer          = &sa1100_timer,
        .restart        = sa11x0_restart,
 MACHINE_END