OMAP3: PM: CPUidle: fix init sequencing
authorKalle Jokiniemi <ext-kalle.jokiniemi@nokia.com>
Fri, 26 Sep 2008 08:04:20 +0000 (11:04 +0300)
committerKevin Hilman <khilman@deeprootsystems.com>
Wed, 11 Nov 2009 22:42:49 +0000 (14:42 -0800)
Previously omap3_idle_init() was called in device_init, while
omap_pm_init() is called at late_initcall. This causes the cpu idle
driver to call omap_sram_idle before it is properly initialized. This
patch fixes the issue by moving omap3_idle_init into omap3_pm_init.

Signed-off-by: Kalle Jokiniemi <ext-kalle.jokiniemi@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-omap2/cpuidle34xx.c
arch/arm/mach-omap2/pm.h
arch/arm/mach-omap2/pm34xx.c

index b0bee34..ad3af11 100644 (file)
@@ -227,7 +227,7 @@ struct cpuidle_driver omap3_idle_driver = {
  * Registers the OMAP3 specific cpuidle driver with the cpuidle
  * framework with the valid set of states.
  */
-int omap3_idle_init(void)
+int __init omap3_idle_init(void)
 {
        int i, count = 0;
        struct omap3_processor_cx *cx;
@@ -272,5 +272,9 @@ int omap3_idle_init(void)
 
        return 0;
 }
-device_initcall(omap3_idle_init);
+#else
+int __init omap3_idle_init(void)
+{
+       return 0;
+}
 #endif /* CONFIG_CPU_IDLE */
index 379e350..0bf345d 100644 (file)
@@ -21,6 +21,7 @@ extern void omap3_pm_off_mode_enable(int);
 extern void omap_sram_idle(void);
 extern int omap3_can_sleep(void);
 extern int set_pwrdm_state(struct powerdomain *pwrdm, u32 state);
+extern int omap3_idle_init(void);
 
 extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
 extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
index 69c47ed..501b001 100644 (file)
@@ -1099,9 +1099,8 @@ static int __init omap3_pm_init(void)
        suspend_set_ops(&omap_pm_ops);
 #endif /* CONFIG_SUSPEND */
 
-#ifndef CONFIG_CPU_IDLE
        pm_idle = omap3_pm_idle;
-#endif
+       omap3_idle_init();
 
        pwrdm_add_wkdep(neon_pwrdm, mpu_pwrdm);
        /*