[POWERPC] Generic time suspend/resume code
This removes the time suspend/restore code that was done through a PMU notifier in arch/platforms/powermac/time.c. Instead, introduce arch/powerpc/sysdev/timer.c which creates a sys device and handles time of day suspend/resume through that. This should probably be replaced by using the generic RTC framework but for now it gets rid of the arcane powermac specific hack. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
@@ -297,49 +297,11 @@ int __init via_calibrate_decr(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* Reset the time after a sleep.
|
||||
*/
|
||||
static int
|
||||
time_sleep_notify(struct pmu_sleep_notifier *self, int when)
|
||||
{
|
||||
static unsigned long time_diff;
|
||||
unsigned long flags;
|
||||
unsigned long seq;
|
||||
struct timespec tv;
|
||||
|
||||
switch (when) {
|
||||
case PBOOK_SLEEP_NOW:
|
||||
do {
|
||||
seq = read_seqbegin_irqsave(&xtime_lock, flags);
|
||||
time_diff = xtime.tv_sec - pmac_get_boot_time();
|
||||
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
|
||||
break;
|
||||
case PBOOK_WAKE:
|
||||
tv.tv_sec = pmac_get_boot_time() + time_diff;
|
||||
tv.tv_nsec = 0;
|
||||
do_settimeofday(&tv);
|
||||
break;
|
||||
}
|
||||
return PBOOK_SLEEP_OK;
|
||||
}
|
||||
|
||||
static struct pmu_sleep_notifier time_sleep_notifier = {
|
||||
time_sleep_notify, SLEEP_LEVEL_MISC,
|
||||
};
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
/*
|
||||
* Query the OF and get the decr frequency.
|
||||
*/
|
||||
void __init pmac_calibrate_decr(void)
|
||||
{
|
||||
#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
|
||||
/* XXX why here? */
|
||||
pmu_register_sleep_notifier(&time_sleep_notifier);
|
||||
#endif
|
||||
|
||||
generic_calibrate_decr();
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
|
Reference in New Issue
Block a user