Patchwork [3/3] rtc: mv: add range

login
register
mail settings
Submitter Alexandre Belloni
Date March 15, 2019, 1:35 p.m.
Message ID <20190315133513.9909-3-alexandre.belloni@bootlin.com>
Download mbox | patch
Permalink /patch/749563/
State New
Headers show

Comments

Alexandre Belloni - March 15, 2019, 1:35 p.m.
This RTC handles time from 2000-01-01 00:00:00 to 2099-12-31 23:59:59 with
a weird rollover to 2000-06-23 00:00:00.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
 drivers/rtc/rtc-mv.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
Gregory CLEMENT - March 15, 2019, 1:49 p.m.
Hi Alexandre,
 
 On ven., mars 15 2019, Alexandre Belloni <alexandre.belloni@bootlin.com> wrote:

> This RTC handles time from 2000-01-01 00:00:00 to 2099-12-31 23:59:59 with
> a weird rollover to 2000-06-23 00:00:00.
>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

Tested-by: Gregory CLEMENT <gregory.clement@bootlin.com>

on Armada XP GP

Thanks,

Gregory

> ---
>  drivers/rtc/rtc-mv.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c
> index ef704aef8663..e357a0b3f612 100644
> --- a/drivers/rtc/rtc-mv.c
> +++ b/drivers/rtc/rtc-mv.c
> @@ -57,7 +57,7 @@ static int mv_rtc_set_time(struct device *dev, struct rtc_time *tm)
>  
>  	rtc_reg = (bin2bcd(tm->tm_mday) << RTC_MDAY_OFFS) |
>  		(bin2bcd(tm->tm_mon + 1) << RTC_MONTH_OFFS) |
> -		(bin2bcd(tm->tm_year % 100) << RTC_YEAR_OFFS);
> +		(bin2bcd(tm->tm_year - 100) << RTC_YEAR_OFFS);
>  	writel(rtc_reg, ioaddr + RTC_DATE_REG_OFFS);
>  
>  	return 0;
> @@ -156,7 +156,7 @@ static int mv_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
>  			<< RTC_MONTH_OFFS;
>  
>  	if (alm->time.tm_year >= 0)
> -		rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year % 100))
> +		rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year - 100))
>  			<< RTC_YEAR_OFFS;
>  
>  	writel(rtc_reg, ioaddr + RTC_ALARM_DATE_REG_OFFS);
> @@ -277,6 +277,9 @@ static int __init mv_rtc_probe(struct platform_device *pdev)
>  		pdata->rtc->ops = &mv_rtc_ops;
>  	}
>  
> +	pdata->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
> +	pdata->rtc->range_max = RTC_TIMESTAMP_END_2099;
> +
>  	ret = rtc_register_device(pdata->rtc);
>  	if (!ret)
>  		return 0;
> -- 
> 2.20.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Patch

diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c
index ef704aef8663..e357a0b3f612 100644
--- a/drivers/rtc/rtc-mv.c
+++ b/drivers/rtc/rtc-mv.c
@@ -57,7 +57,7 @@  static int mv_rtc_set_time(struct device *dev, struct rtc_time *tm)
 
 	rtc_reg = (bin2bcd(tm->tm_mday) << RTC_MDAY_OFFS) |
 		(bin2bcd(tm->tm_mon + 1) << RTC_MONTH_OFFS) |
-		(bin2bcd(tm->tm_year % 100) << RTC_YEAR_OFFS);
+		(bin2bcd(tm->tm_year - 100) << RTC_YEAR_OFFS);
 	writel(rtc_reg, ioaddr + RTC_DATE_REG_OFFS);
 
 	return 0;
@@ -156,7 +156,7 @@  static int mv_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
 			<< RTC_MONTH_OFFS;
 
 	if (alm->time.tm_year >= 0)
-		rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year % 100))
+		rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year - 100))
 			<< RTC_YEAR_OFFS;
 
 	writel(rtc_reg, ioaddr + RTC_ALARM_DATE_REG_OFFS);
@@ -277,6 +277,9 @@  static int __init mv_rtc_probe(struct platform_device *pdev)
 		pdata->rtc->ops = &mv_rtc_ops;
 	}
 
+	pdata->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
+	pdata->rtc->range_max = RTC_TIMESTAMP_END_2099;
+
 	ret = rtc_register_device(pdata->rtc);
 	if (!ret)
 		return 0;