|
@@ -58,6 +58,7 @@
|
|
u32 enable_off_mode;
|
|
u32 enable_off_mode;
|
|
u32 sleep_while_idle;
|
|
u32 sleep_while_idle;
|
|
u32 wakeup_timer_seconds;
|
|
u32 wakeup_timer_seconds;
|
|
|
|
+u32 wakeup_timer_milliseconds;
|
|
|
|
|
|
struct power_state {
|
|
struct power_state {
|
|
struct powerdomain *pwrdm;
|
|
struct powerdomain *pwrdm;
|
|
@@ -555,20 +556,21 @@ out:
|
|
#ifdef CONFIG_SUSPEND
|
|
#ifdef CONFIG_SUSPEND
|
|
static suspend_state_t suspend_state;
|
|
static suspend_state_t suspend_state;
|
|
|
|
|
|
-static void omap2_pm_wakeup_on_timer(u32 seconds)
|
|
|
|
|
|
+static void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
|
|
{
|
|
{
|
|
u32 tick_rate, cycles;
|
|
u32 tick_rate, cycles;
|
|
|
|
|
|
- if (!seconds)
|
|
|
|
|
|
+ if (!seconds && !milliseconds)
|
|
return;
|
|
return;
|
|
|
|
|
|
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
|
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
|
- cycles = tick_rate * seconds;
|
|
|
|
|
|
+ cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
|
|
omap_dm_timer_stop(gptimer_wakeup);
|
|
omap_dm_timer_stop(gptimer_wakeup);
|
|
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
|
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
|
|
|
|
|
- pr_info("PM: Resume timer in %d secs (%d ticks at %d ticks/sec.)\n",
|
|
|
|
- seconds, cycles, tick_rate);
|
|
|
|
|
|
+ pr_info("PM: Resume timer in %u.%03u secs"
|
|
|
|
+ " (%d ticks at %d ticks/sec.)\n",
|
|
|
|
+ seconds, milliseconds, cycles, tick_rate);
|
|
}
|
|
}
|
|
|
|
|
|
static int omap3_pm_prepare(void)
|
|
static int omap3_pm_prepare(void)
|
|
@@ -582,8 +584,9 @@ static int omap3_pm_suspend(void)
|
|
struct power_state *pwrst;
|
|
struct power_state *pwrst;
|
|
int state, ret = 0;
|
|
int state, ret = 0;
|
|
|
|
|
|
- if (wakeup_timer_seconds)
|
|
|
|
- omap2_pm_wakeup_on_timer(wakeup_timer_seconds);
|
|
|
|
|
|
+ if (wakeup_timer_seconds || wakeup_timer_milliseconds)
|
|
|
|
+ omap2_pm_wakeup_on_timer(wakeup_timer_seconds,
|
|
|
|
+ wakeup_timer_milliseconds);
|
|
|
|
|
|
/* Read current next_pwrsts */
|
|
/* Read current next_pwrsts */
|
|
list_for_each_entry(pwrst, &pwrst_list, node)
|
|
list_for_each_entry(pwrst, &pwrst_list, node)
|