Skip to content

Commit

Permalink
rtc: pcf8523: refuse to write dates later than 2099
Browse files Browse the repository at this point in the history
When the chip increments the YEAR register and it already holds
bin2bcd(99) it reads as 0 afterwards. With this behaviour the last valid
day (without trickery) that has a representation is 2099-12-31 23:59:59.
So refuse to write later dates.

Signed-off-by: Uwe Kleine-König <[email protected]>
Signed-off-by: Alexandre Belloni <[email protected]>
  • Loading branch information
Uwe Kleine-König authored and alexandrebelloni committed Jan 11, 2016
1 parent c60faa3 commit fbbf53f
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions drivers/rtc/rtc-pcf8523.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,17 @@ static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm)
u8 regs[8];
int err;

/*
* The hardware can only store values between 0 and 99 in it's YEAR
* register (with 99 overflowing to 0 on increment).
* After 2100-02-28 we could start interpreting the year to be in the
* interval [2100, 2199], but there is no path to switch in a smooth way
* because the chip handles YEAR=0x00 (and the out-of-spec
* YEAR=0xa0) as a leap year, but 2100 isn't.
*/
if (tm->tm_year < 100 || tm->tm_year >= 200)
return -EINVAL;

err = pcf8523_stop_rtc(client);
if (err < 0)
return err;
Expand Down

0 comments on commit fbbf53f

Please sign in to comment.