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 | ||
