Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp263820imm; Wed, 30 May 2018 23:15:06 -0700 (PDT) X-Google-Smtp-Source: ADUXVKI+PLRWtixV1agMznO+digmTIBCV7KegS2Oa+7JVexqZmSRaLpuEQEI8J5u074eYIWW5Cp1 X-Received: by 2002:a65:5042:: with SMTP id k2-v6mr4432643pgo.122.1527747306772; Wed, 30 May 2018 23:15:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527747306; cv=none; d=google.com; s=arc-20160816; b=FCXuBxH8sHZyrH0MzUlN+P0NCJpasT7JFvFcWZ7dlDAcdoGTwwuDnt8rkZkLIbQAWq lSv/+2V4HG2RUbwrQp0zob61tXYb1U7aa6JkLwjCnIMFrEVt/1wlfQouZLQTdXeQ4wbw eYm0HKOLWhx/WvD4WMTH6tr7olJfL1UF7UIHL5y8cPJotXQonybUvXP2Dy3n4GvLYL98 o9JFS/zbnsZ6Zeiq64OZiKW66gXXbw0S+VvEgCUFzOeGGgn6xP2OxQdHrHkknZ64sCVX 6f9tnfR+r6VNuGT5i648SGZB9FkmaaNr81QBWAjM2m2pprkHJL8TVuAla4bT+cqxS5Bd KibA== 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=kq+b5ZgFF3KoHfUAzOxcD8owGB0qw/lCjT9/Wt0Iif0=; b=ciViqb8kj9suIDn9WBn/3o4h1gqQQuV+kde8OsY4FnFwX0TEaCk4gCUGtHdMvjCARW iAA5pVIiIGEQs0DlJm0lArBsXA9I4OVpko2IUFZMpEbXmUXoMDSI1IKvWooR2EZTWZ2h u8fqWfbaXjGekHevt3kDIWUz4i426hdbzCgGBrVz1c8FKlSL0l7shIMv0zzJz2/yPigf 9Beq1fdqJuV1/RPOO8VInL7chryAx3dAbyjMbrSP3P1rfKBR2RGWyU0J3k2IO2I3VSG9 nC4o6FrEv2QSIPUWKM8Z00fcAboq8vQXoDpyCAErha1hyak7Vu/w3RzwlTiq2N6hjiqa O1sA== 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 s66-v6si37528851pfj.164.2018.05.30.23.14.53; Wed, 30 May 2018 23:15:06 -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 S1753982AbeEaGOF (ORCPT + 99 others); Thu, 31 May 2018 02:14:05 -0400 Received: from smtpproxy19.qq.com ([184.105.206.84]:41037 "EHLO smtpproxy19.qq.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751660AbeEaGOE (ORCPT ); Thu, 31 May 2018 02:14:04 -0400 X-QQ-mid: bizesmtp7t1527747236t0xkpqe6c Received: from localhost.localdomain (unknown [218.76.23.26]) by esmtp4.qq.com (ESMTP) with id ; Thu, 31 May 2018 14:13:52 +0800 (CST) X-QQ-SSF: 01400000007000F0FG22000A0000000 X-QQ-FEAT: lRjdLcu6z5rErUlKClaR2EafU9lEjXbOfR71ch+TC66DrzrdrS7gcDT0x8gAa ryMh753UMZcAooUZefPi7ipBMKIrGgHDAJt+NM+KqZsJDvU2khoIZn+DSWwtgOOgRJxoe+U BVM9cc1Q26PzVvOcjDbfdJWSeFRQTjkTpQ95eRac0eObkazCp4EEjS/ERqwXsq+Cqy72U45 NAT2i+oiOvBBbBqmkT2gbueVope6+ArwRYfvcRbrNgaalsf79lTu0CZz+Bllv2xVO6qIYt9 vOiqntI0Lb4IOOW68BG1p2cnpfM5N8/+kTMA== X-QQ-GoodBg: 2 From: Linkui To: alexandre.belloni@bootlin.com Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org, Linkui Xiao Subject: [PATCH] It assume 20xx not 19xx. Date: Thu, 31 May 2018 14:13:51 +0800 Message-Id: <20180531061351.6981-1-xiaolinkui@kylinos.cn> X-Mailer: git-send-email 2.17.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:kylinos.cn:qybgforeign:qybgforeign4 X-QQ-Bgrelay: 1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Linkui Xiao If we settime between 1970 and 2000. for example: root# date 052915571978 root# hwclock -w It will be wrong, this patch fix the bug. Signed-off-by: Linkui Xiao --- 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 a13e59e..8c218a1 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.7.4