summaryrefslogtreecommitdiff
path: root/drivers/rtc/rtc-tps6586x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-tps6586x.c')
-rw-r--r--drivers/rtc/rtc-tps6586x.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/rtc/rtc-tps6586x.c b/drivers/rtc/rtc-tps6586x.c
index c74d7db832ef..fccf13845022 100644
--- a/drivers/rtc/rtc-tps6586x.c
+++ b/drivers/rtc/rtc-tps6586x.c
@@ -134,6 +134,7 @@ static int tps6586x_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
struct device *tps_dev = to_tps6586x_dev(dev);
unsigned long seconds;
unsigned long ticks;
+ unsigned long rtc_current_time;
unsigned long long rticks = 0;
u8 buff[3];
u8 rbuff[6];
@@ -160,21 +161,21 @@ static int tps6586x_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
seconds -= rtc->epoch_start;
- if (seconds > ALM1_VALID_RANGE_IN_SEC) {
- err = tps6586x_reads(tps_dev, RTC_COUNT4_DUMMYREAD, sizeof(rbuff), rbuff);
- if (err < 0) {
- dev_err(dev, "failed to read counter\n");
- return err;
- }
-
- for (i = 1; i < sizeof(rbuff); i++) {
- rticks <<= 8;
- rticks |= rbuff[i];
- }
+ err = tps6586x_reads(tps_dev, RTC_COUNT4_DUMMYREAD, sizeof(rbuff), rbuff);
+ if (err < 0) {
+ dev_err(dev, "failed to read counter\n");
+ return err;
+ }
- seconds = (rticks >> 10) - 1;
+ for (i = 1; i < sizeof(rbuff); i++) {
+ rticks <<= 8;
+ rticks |= rbuff[i];
}
+ rtc_current_time = rticks >> 10;
+ if ((seconds - rtc_current_time) > ALM1_VALID_RANGE_IN_SEC)
+ seconds = rtc_current_time - 1;
+
ticks = (unsigned long long)seconds << 10;
buff[0] = (ticks >> 16) & 0xff;