From 68cfa179d94df4c16145e3b3aa30a35120ddf0db Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Mon, 19 Jan 2004 05:12:20 -0800 Subject: [PATCH] [PATCH] suspend/resume support for PIT From: Pavel Machek This adds proper suspend/resume support for PIT. That means that clock are actually correct after suspend/resume. --- arch/i386/kernel/time.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index 65054ace15095..2a7f59c379775 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c @@ -307,7 +307,31 @@ unsigned long get_cmos_time(void) return retval; } +static long clock_cmos_diff; + +static int time_suspend(struct sys_device *dev, u32 state) +{ + /* + * Estimate time zone so that set_time can update the clock + */ + clock_cmos_diff = -get_cmos_time(); + clock_cmos_diff += get_seconds(); + return 0; +} + +static int time_resume(struct sys_device *dev) +{ + unsigned long sec = get_cmos_time() + clock_cmos_diff; + write_seqlock_irq(&xtime_lock); + xtime.tv_sec = sec; + xtime.tv_nsec = 0; + write_sequnlock_irq(&xtime_lock); + return 0; +} + static struct sysdev_class pit_sysclass = { + .resume = time_resume, + .suspend = time_suspend, set_kset_name("pit"), }; -- 2.53.0