Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3107279imm; Sun, 3 Jun 2018 19:56:21 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLKjEkkHJTHGyzDH3BFknGvRshsZZJ9Q1w76811YLQGfzaMVt2wA0rHHL0N/cKmSKi4n3fL X-Received: by 2002:a17:902:3c5:: with SMTP id d63-v6mr19888550pld.163.1528080981582; Sun, 03 Jun 2018 19:56:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528080981; cv=none; d=google.com; s=arc-20160816; b=hXKMTjEN147iVo87/wb0L3Yi4h+z/1I4IQr4bh6Bw+W3xPIwB+Jcw3KsHgAiHmBvcB I3wTpfD6o1xPeMbAd0QIOScb5loJchrIvzbC9ewj4mnJ5Nku0975e2rfmHNyBaVPfaxI m/VzHaibt30q9iTPoPeDFAdyeIVtqIZ8oO2H0b/D6Kdpz3YjqBUU9rl7QuaKqWM7HUkP Kg03w2EAtKtAO7cz3u0YNW3weqhSZDQoJ4ctD7viM0GyCQkLMq66uksHhFrFtOhjGB5P juzVDVOsi+fVdL3mMoa16OiezTyjCOqmrGei/V8Y4Wh7Ap9w9tzkmvWioLcVgdkDYUkq 8Itg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:feedback-id:message-id:date:subject:cc:to :from:arc-authentication-results; bh=ZT3zXT5x1+ZE9nSdi/mJL05W2NaP6oGqZF0UjfR2jnE=; b=dbghqcdso2xshyGksvBbtw2LbMzEXofoTLjxa6V2vjF/RdAr9MBUiFTtonN5/Hqvci vOQjx25Wpc0RZl8FO9Auxgnxv03pSkP//97kJ5yzK07OmyBCBuzDB+FeDyf8jIOW2/0E QmTL3nGIrO2cYGKxvU7W4q5+PPWW8YZnwEq4cTWFjSy9LVH6JPvB4Bi/rtxajVwaJIH4 SS7MhwmG+Kl2qjB0LptlVE1TS8MXKyfGjXV3/dMcaJh7xqP80O71HLz/BPghVdMPbWYj lQEFp0Z23qU9LlmQlvgPD6ZyJeQXY5MM90c4IewkLpWukS2J5YPcsFlserMbcuk4AGY8 osiQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d124-v6si45906272pfc.176.2018.06.03.19.56.07; Sun, 03 Jun 2018 19:56:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751840AbeFDCzg (ORCPT + 99 others); Sun, 3 Jun 2018 22:55:36 -0400 Received: from SMTPBG19.QQ.COM ([183.60.61.236]:52091 "EHLO smtpbg320.qq.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751445AbeFDCzf (ORCPT ); Sun, 3 Jun 2018 22:55:35 -0400 X-Greylist: delayed 425 seconds by postgrey-1.27 at vger.kernel.org; Sun, 03 Jun 2018 22:55:34 EDT X-QQ-mid: bizesmtp6t1528080477tjz15i597 Received: from localhost.localdomain (unknown [218.76.23.26]) by esmtp6.qq.com (ESMTP) with id ; Mon, 04 Jun 2018 10:47:42 +0800 (CST) X-QQ-SSF: 01400000000000F0FG22B00A0000000 X-QQ-FEAT: AU3gs7VM8fVpzxHGrWROQZXwfEBC7OywgxjJJ5n/y6BqHs/W83VjgURI7zYBZ mNATMzDdNoZbubyXaEmT9ep3PKcTYqd32gJ4tCwWlNJIu4+Cv5sOct6xLicmd/Yv/TQVdar p3YKBR7g5G3c75cXt1o4mp5herCXlK60BrKJsK+te5lDV3u1eS30zFmJXd0899t2043O4Vv BhZ43nKuikJrwfgbnTR9crfHKlNQxEVM/W506M9dz4KfuWh9P7zz8YBiqDys8dvRa1+5qx2 j1nT2EuGsEve0cev04P/ZgPf8= X-QQ-GoodBg: 2 From: Linkui To: alexandre.belloni@bootlin.com Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] rtc:ds1307:it assume 20xx not 19xx. Date: Mon, 4 Jun 2018 10:47:42 +0800 Message-Id: <20180604024742.29240-1-xiaolinkui@kylinos.cn> X-Mailer: git-send-email 2.17.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:kylinos.cn:qybgforeign:qybgforeign1 X-QQ-Bgrelay: 1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If we settime between 1970 and 2000. for example: $ date 052915571978 $ hwclock -w it will be wrong, this patch fix it. Signed-off-by: Linkui --- drivers/rtc/rtc-ds1307.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index a13e59edff53..8c218a16569d 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -425,7 +425,9 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t) t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f); tmp = regs[DS1307_REG_MONTH] & 0x1f; t->tm_mon = bcd2bin(tmp) - 1; - t->tm_year = bcd2bin(regs[DS1307_REG_YEAR]) + 100; + t->tm_year = bcd2bin(regs[DS1307_REG_YEAR]); + if (t->tm_year >= 0 && t->tm_year <= 69) + t->tm_year += 100; if (regs[chip->century_reg] & chip->century_bit && IS_ENABLED(CONFIG_RTC_DRV_DS1307_CENTURY)) @@ -454,7 +456,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) t->tm_hour, t->tm_mday, t->tm_mon, t->tm_year, t->tm_wday); - if (t->tm_year < 100) + if (t->tm_year < 0) return -EINVAL; #ifdef CONFIG_RTC_DRV_DS1307_CENTURY @@ -472,8 +474,9 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); - /* assume 20YY not 19YY */ - tmp = t->tm_year - 100; + tmp = t->tm_year; + if (tmp >= 100 && tmp <= 169) + tmp -= 100; regs[DS1307_REG_YEAR] = bin2bcd(tmp); if (chip->century_enable_bit) -- 2.17.0