Commit b509306d authored by Alexandre Belloni's avatar Alexandre Belloni

rtc: goldfish: switch to rtc_time64_to_tm/rtc_tm_to_time64

This RTC handles dates after 2106 (up to July 2554), call the 64bit
versions of rtc_tm time conversion.
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 6a6ec8c1
...@@ -57,7 +57,7 @@ static int goldfish_rtc_read_alarm(struct device *dev, ...@@ -57,7 +57,7 @@ static int goldfish_rtc_read_alarm(struct device *dev,
do_div(rtc_alarm, NSEC_PER_SEC); do_div(rtc_alarm, NSEC_PER_SEC);
memset(alrm, 0, sizeof(struct rtc_wkalrm)); memset(alrm, 0, sizeof(struct rtc_wkalrm));
rtc_time_to_tm(rtc_alarm, &alrm->time); rtc_time64_to_tm(rtc_alarm, &alrm->time);
if (readl(base + TIMER_ALARM_STATUS)) if (readl(base + TIMER_ALARM_STATUS))
alrm->enabled = 1; alrm->enabled = 1;
...@@ -71,21 +71,15 @@ static int goldfish_rtc_set_alarm(struct device *dev, ...@@ -71,21 +71,15 @@ static int goldfish_rtc_set_alarm(struct device *dev,
struct rtc_wkalrm *alrm) struct rtc_wkalrm *alrm)
{ {
struct goldfish_rtc *rtcdrv; struct goldfish_rtc *rtcdrv;
unsigned long rtc_alarm;
u64 rtc_alarm64; u64 rtc_alarm64;
u64 rtc_status_reg; u64 rtc_status_reg;
void __iomem *base; void __iomem *base;
int ret = 0;
rtcdrv = dev_get_drvdata(dev); rtcdrv = dev_get_drvdata(dev);
base = rtcdrv->base; base = rtcdrv->base;
if (alrm->enabled) { if (alrm->enabled) {
ret = rtc_tm_to_time(&alrm->time, &rtc_alarm); rtc_alarm64 = rtc_tm_to_time64(&alrm->time) * NSEC_PER_SEC;
if (ret != 0)
return ret;
rtc_alarm64 = rtc_alarm * NSEC_PER_SEC;
writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH); writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
writel(rtc_alarm64, base + TIMER_ALARM_LOW); writel(rtc_alarm64, base + TIMER_ALARM_LOW);
} else { } else {
...@@ -99,7 +93,7 @@ static int goldfish_rtc_set_alarm(struct device *dev, ...@@ -99,7 +93,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
writel(1, base + TIMER_CLEAR_ALARM); writel(1, base + TIMER_CLEAR_ALARM);
} }
return ret; return 0;
} }
static int goldfish_rtc_alarm_irq_enable(struct device *dev, static int goldfish_rtc_alarm_irq_enable(struct device *dev,
...@@ -148,7 +142,7 @@ static int goldfish_rtc_read_time(struct device *dev, struct rtc_time *tm) ...@@ -148,7 +142,7 @@ static int goldfish_rtc_read_time(struct device *dev, struct rtc_time *tm)
do_div(time, NSEC_PER_SEC); do_div(time, NSEC_PER_SEC);
rtc_time_to_tm(time, tm); rtc_time64_to_tm(time, tm);
return 0; return 0;
} }
...@@ -157,21 +151,16 @@ static int goldfish_rtc_set_time(struct device *dev, struct rtc_time *tm) ...@@ -157,21 +151,16 @@ static int goldfish_rtc_set_time(struct device *dev, struct rtc_time *tm)
{ {
struct goldfish_rtc *rtcdrv; struct goldfish_rtc *rtcdrv;
void __iomem *base; void __iomem *base;
unsigned long now;
u64 now64; u64 now64;
int ret;
rtcdrv = dev_get_drvdata(dev); rtcdrv = dev_get_drvdata(dev);
base = rtcdrv->base; base = rtcdrv->base;
ret = rtc_tm_to_time(tm, &now); now64 = rtc_tm_to_time64(tm) * NSEC_PER_SEC;
if (ret == 0) { writel((now64 >> 32), base + TIMER_TIME_HIGH);
now64 = now * NSEC_PER_SEC; writel(now64, base + TIMER_TIME_LOW);
writel((now64 >> 32), base + TIMER_TIME_HIGH);
writel(now64, base + TIMER_TIME_LOW);
}
return ret; return 0;
} }
static const struct rtc_class_ops goldfish_rtc_ops = { static const struct rtc_class_ops goldfish_rtc_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment