diff options
-rw-r--r-- | drivers/rtc/class.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c index 01a7df5317c1..b82a1554cdc1 100644 --- a/drivers/rtc/class.c +++ b/drivers/rtc/class.c | |||
@@ -66,7 +66,7 @@ static int rtc_suspend(struct device *dev, pm_message_t mesg) | |||
66 | */ | 66 | */ |
67 | delta = timespec_sub(old_system, old_rtc); | 67 | delta = timespec_sub(old_system, old_rtc); |
68 | delta_delta = timespec_sub(delta, old_delta); | 68 | delta_delta = timespec_sub(delta, old_delta); |
69 | if (abs(delta_delta.tv_sec) >= 2) { | 69 | if (delta_delta.tv_sec < -2 || delta_delta.tv_sec >= 2) { |
70 | /* | 70 | /* |
71 | * if delta_delta is too large, assume time correction | 71 | * if delta_delta is too large, assume time correction |
72 | * has occured and set old_delta to the current delta. | 72 | * has occured and set old_delta to the current delta. |
@@ -100,9 +100,8 @@ static int rtc_resume(struct device *dev) | |||
100 | rtc_tm_to_time(&tm, &new_rtc.tv_sec); | 100 | rtc_tm_to_time(&tm, &new_rtc.tv_sec); |
101 | new_rtc.tv_nsec = 0; | 101 | new_rtc.tv_nsec = 0; |
102 | 102 | ||
103 | if (new_rtc.tv_sec <= old_rtc.tv_sec) { | 103 | if (new_rtc.tv_sec < old_rtc.tv_sec) { |
104 | if (new_rtc.tv_sec < old_rtc.tv_sec) | 104 | pr_debug("%s: time travel!\n", dev_name(&rtc->dev)); |
105 | pr_debug("%s: time travel!\n", dev_name(&rtc->dev)); | ||
106 | return 0; | 105 | return 0; |
107 | } | 106 | } |
108 | 107 | ||
@@ -119,7 +118,8 @@ static int rtc_resume(struct device *dev) | |||
119 | sleep_time = timespec_sub(sleep_time, | 118 | sleep_time = timespec_sub(sleep_time, |
120 | timespec_sub(new_system, old_system)); | 119 | timespec_sub(new_system, old_system)); |
121 | 120 | ||
122 | timekeeping_inject_sleeptime(&sleep_time); | 121 | if (sleep_time.tv_sec >= 0) |
122 | timekeeping_inject_sleeptime(&sleep_time); | ||
123 | return 0; | 123 | return 0; |
124 | } | 124 | } |
125 | 125 | ||