rtc: m41t80: avoid out of range year values
Avoid saving an out of range year value to the RTC. Reading that value from the RTC again returns a totally wrong time value. For Example $ timedatectl set-ntp no $ timedatectl set-time "1990-01-01 12:12:00" # Reboot rtc-m41t80 0-0068: setting system clock to 2090-01-01 12:12:35 UTC (3786955955) Signed-off-by: Stefan Christ <s.christ@phytec.de> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
This commit is contained in:
parent
ae6e00b4c0
commit
bcebd81d00
1 changed files with 6 additions and 0 deletions
|
@ -176,7 +176,13 @@ static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
|
|||
bin2bcd(tm->tm_mday) | (buf[M41T80_REG_DAY] & ~0x3f);
|
||||
buf[M41T80_REG_MON] =
|
||||
bin2bcd(tm->tm_mon + 1) | (buf[M41T80_REG_MON] & ~0x1f);
|
||||
|
||||
/* assume 20YY not 19YY */
|
||||
if (tm->tm_year < 100 || tm->tm_year > 199) {
|
||||
dev_err(&client->dev, "Year must be between 2000 and 2099. It's %d.\n",
|
||||
tm->tm_year + 1900);
|
||||
return -EINVAL;
|
||||
}
|
||||
buf[M41T80_REG_YEAR] = bin2bcd(tm->tm_year % 100);
|
||||
|
||||
if (i2c_transfer(client->adapter, msgs, 1) != 1) {
|
||||
|
|
Loading…
Reference in a new issue