@@ -320,22 +320,22 @@ void omap3_cpuidle_update_states(u32 mpu_deepest_state, u32 core_deepest_state)
}
}
-void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
+static void omap3_pm_override_cpuidle_states(void)
{
int i;
- if (!cpuidle_board_params)
+ if (!cpuidle_params_override_table)
return;
for (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) {
cpuidle_params_table[i].valid =
- cpuidle_board_params[i].valid;
+ cpuidle_params_override_table[i].valid;
cpuidle_params_table[i].sleep_latency =
- cpuidle_board_params[i].sleep_latency;
+ cpuidle_params_override_table[i].sleep_latency;
cpuidle_params_table[i].wake_latency =
- cpuidle_board_params[i].wake_latency;
+ cpuidle_params_override_table[i].wake_latency;
cpuidle_params_table[i].threshold =
- cpuidle_board_params[i].threshold;
+ cpuidle_params_override_table[i].threshold;
}
return;
}
@@ -500,6 +500,7 @@ int __init omap3_idle_init(void)
per_pd = pwrdm_lookup("per_pwrdm");
cam_pd = pwrdm_lookup("cam_pwrdm");
+ omap3_pm_override_cpuidle_states();
omap_init_power_states();
cpuidle_register_driver(&omap3_idle_driver);
@@ -25,6 +25,9 @@
#include "pm.h"
static struct omap_device_pm_latency *pm_lats;
+#if defined(CONFIG_PM) && defined(CONFIG_CPU_IDLE)
+struct cpuidle_params *cpuidle_params_override_table;
+#endif
static struct device *mpu_dev;
static struct device *iva_dev;
@@ -268,3 +271,15 @@ static int __init omap2_common_pm_late_init(void)
return 0;
}
late_initcall(omap2_common_pm_late_init);
+
+#if defined(CONFIG_PM) && defined(CONFIG_CPU_IDLE)
+/*
+ * Used by the board code to override the default cpuidle C-states tables.
+ * Must be called before the cpuidle driver is registered in omap3_idle_init.
+ */
+void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
+{
+ cpuidle_params_override_table = cpuidle_board_params;
+}
+#endif
+
@@ -44,7 +44,9 @@ struct cpuidle_params {
};
#if defined(CONFIG_PM) && defined(CONFIG_CPU_IDLE)
+extern struct cpuidle_params *cpuidle_params_override_table;
extern void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params);
+extern void omap3_cpuidle_update_states(u32, u32);
#else
static
inline void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
@@ -73,10 +75,6 @@ extern u32 sleep_while_idle;
#define sleep_while_idle 0
#endif
-#if defined(CONFIG_CPU_IDLE)
-extern void omap3_cpuidle_update_states(u32, u32);
-#endif
-
#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev);
extern int pm_dbg_regset_save(int reg_set);