Message ID | 1432911877-607-3-git-send-email-xlpang@126.com |
---|---|
State | Superseded |
Headers | show |
On Friday 29 May 2015 23:04:37 Xunlei Pang wrote: > } > > - rtc_tm_to_time(alrm_tm, &time_set); > - rtc_tm_to_time(&tm_now, &time_now); > + time_set = rtc_tm_to_time64(alrm_tm); > + time_now = rtc_tm_to_time64(&tm_now); > if (time_set <= time_now) { > dev_err(dev, "Date to set in the past\n"); > return -EINVAL; > } > > + if (time_set > time_now + 255 * SEC_IN_DAY) { > + dev_err(dev, "Day must be in the range 0 - 255\n"); > + return -EINVAL; > + } > + > So this driver also uses the two values just to do a comparison and to take the difference in seconds. If we have a helper function that returns the difference between two rtc_tm values as a time64_t, we can use that for both this driver and isl1208. Arnd
Hi Arnd, Arnd Bergmann <arnd@arndb.de> wrote 2015-06-02 AM 03:53:03: > Re: [PATCH RESEND 3/3] drivers/rtc/sunxi: Replace deprecated rtc_tm_to_time() > > On Friday 29 May 2015 23:04:37 Xunlei Pang wrote: > > } > > > > - rtc_tm_to_time(alrm_tm, &time_set); > > - rtc_tm_to_time(&tm_now, &time_now); > > + time_set = rtc_tm_to_time64(alrm_tm); > > + time_now = rtc_tm_to_time64(&tm_now); > > if (time_set <= time_now) { > > dev_err(dev, "Date to set in the past\n"); > > return -EINVAL; > > } > > > > + if (time_set > time_now + 255 * SEC_IN_DAY) { > > + dev_err(dev, "Day must be in the range 0 - 255\n"); > > + return -EINVAL; > > + } > > + > > > > So this driver also uses the two values just to do a comparison > and to take the difference in seconds. > > If we have a helper function that returns the difference between > two rtc_tm values as a time64_t, we can use that for both > this driver and isl1208. Indeed, will do. Thanks, -Xunlei -------------------------------------------------------- ZTE Information Security Notice: The information contained in this mail (and any attachment transmitted herewith) is privileged and confidential and is intended for the exclusive use of the addressee(s). If you are not an intended recipient, any disclosure, reproduction, distribution or other dissemination or use of the information contained is strictly prohibited. If you have received this mail in error, please delete it and notify us immediately.
diff --git a/drivers/rtc/rtc-sunxi.c b/drivers/rtc/rtc-sunxi.c index 6e678fa..7f22753 100644 --- a/drivers/rtc/rtc-sunxi.c +++ b/drivers/rtc/rtc-sunxi.c @@ -269,14 +269,13 @@ static int sunxi_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) struct sunxi_rtc_dev *chip = dev_get_drvdata(dev); struct rtc_time *alrm_tm = &wkalrm->time; struct rtc_time tm_now; - u32 alrm = 0; - unsigned long time_now = 0; - unsigned long time_set = 0; - unsigned long time_gap = 0; - unsigned long time_gap_day = 0; - unsigned long time_gap_hour = 0; - unsigned long time_gap_min = 0; - int ret = 0; + u32 alrm; + time64_t time_set, time_now; + unsigned long time_gap; + unsigned long time_gap_day; + unsigned long time_gap_hour; + unsigned long time_gap_min; + int ret; ret = sunxi_rtc_gettime(dev, &tm_now); if (ret < 0) { @@ -284,13 +283,18 @@ static int sunxi_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) return -EINVAL; } - rtc_tm_to_time(alrm_tm, &time_set); - rtc_tm_to_time(&tm_now, &time_now); + time_set = rtc_tm_to_time64(alrm_tm); + time_now = rtc_tm_to_time64(&tm_now); if (time_set <= time_now) { dev_err(dev, "Date to set in the past\n"); return -EINVAL; } + if (time_set > time_now + 255 * SEC_IN_DAY) { + dev_err(dev, "Day must be in the range 0 - 255\n"); + return -EINVAL; + } + time_gap = time_set - time_now; time_gap_day = time_gap / SEC_IN_DAY; time_gap -= time_gap_day * SEC_IN_DAY; @@ -299,11 +303,6 @@ static int sunxi_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) time_gap_min = time_gap / SEC_IN_MIN; time_gap -= time_gap_min * SEC_IN_MIN; - if (time_gap_day > 255) { - dev_err(dev, "Day must be in the range 0 - 255\n"); - return -EINVAL; - } - sunxi_rtc_setaie(0, chip); writel(0, chip->base + SUNXI_ALRM_DHMS); usleep_range(100, 300);