Skip to content

Commit

Permalink
rtc: ftrtc010: let the core handle range
Browse files Browse the repository at this point in the history
The current range handling is highly suspicious. Anyway, let the core
handle it.
The RTC has a 32 bit counter on top of days + hh:mm:ss registers.

Acked-by: Hans Ulli Kroll <ulli.kroll@googlemail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
  • Loading branch information
Alexandre Belloni committed Jun 7, 2018
1 parent 73318f8 commit b8e62b5
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions drivers/rtc/rtc-ftrtc010.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,6 @@ static int ftrtc010_rtc_set_time(struct device *dev, struct rtc_time *tm)
u32 sec, min, hour, day, offset;
timeu64_t time;

if (tm->tm_year >= 2148) /* EPOCH Year + 179 */
return -EINVAL;

time = rtc_tm_to_time64(tm);

sec = readl(rtc->rtc_base + FTRTC010_RTC_SECOND);
Expand All @@ -120,6 +117,7 @@ static const struct rtc_class_ops ftrtc010_rtc_ops = {

static int ftrtc010_rtc_probe(struct platform_device *pdev)
{
u32 days, hour, min, sec;
struct ftrtc010_rtc *rtc;
struct device *dev = &pdev->dev;
struct resource *res;
Expand Down Expand Up @@ -172,6 +170,15 @@ static int ftrtc010_rtc_probe(struct platform_device *pdev)

rtc->rtc_dev->ops = &ftrtc010_rtc_ops;

sec = readl(rtc->rtc_base + FTRTC010_RTC_SECOND);
min = readl(rtc->rtc_base + FTRTC010_RTC_MINUTE);
hour = readl(rtc->rtc_base + FTRTC010_RTC_HOUR);
days = readl(rtc->rtc_base + FTRTC010_RTC_DAYS);

rtc->rtc_dev->range_min = (u64)days * 86400 + hour * 3600 +
min * 60 + sec;
rtc->rtc_dev->range_max = U32_MAX + rtc->rtc_dev->range_min;

ret = devm_request_irq(dev, rtc->rtc_irq, ftrtc010_rtc_interrupt,
IRQF_SHARED, pdev->name, dev);
if (unlikely(ret))
Expand Down

0 comments on commit b8e62b5

Please sign in to comment.