From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932900AbcBIK6S (ORCPT ); Tue, 9 Feb 2016 05:58:18 -0500 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:48971 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755442AbcBIK5d (ORCPT ); Tue, 9 Feb 2016 05:57:33 -0500 From: Juergen Borleis To: rtc-linux@googlegroups.com Cc: Alessandro Zummo , Alexandre Belloni , linux-kernel@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH v2 2/3] RTC/PCF85063: fix time/date reading Date: Tue, 9 Feb 2016 11:57:26 +0100 Message-Id: <1455015447-13886-3-git-send-email-jbe@pengutronix.de> X-Mailer: git-send-email 2.7.0.rc3 In-Reply-To: <1455015447-13886-1-git-send-email-jbe@pengutronix.de> References: <1455015447-13886-1-git-send-email-jbe@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: jbe@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Check if the RTC signals an invalid time/date (due to a battery power loss for example). In this case ignore the time/date until it is really set again. Signed-off-by: Juergen Borleis --- drivers/rtc/rtc-pcf85063.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c index 7f9caee..e0343e6 100644 --- a/drivers/rtc/rtc-pcf85063.c +++ b/drivers/rtc/rtc-pcf85063.c @@ -22,6 +22,7 @@ #define PCF85063_REG_CTRL2 0x01 #define PCF85063_REG_SC 0x04 /* datetime */ +#define PCF85063_REG_SC_OS 0x80 #define PCF85063_REG_MN 0x05 #define PCF85063_REG_HR 0x06 #define PCF85063_REG_DM 0x07 @@ -62,6 +63,12 @@ static int pcf85063_get_datetime(struct i2c_client *client, struct rtc_time *tm) return -EIO; } + /* if the clock has lost its power it makes no sense to use its time */ + if (regs[0] & PCF85063_REG_SC_OS) { + dev_warn(&client->dev, "Power loss detected, invalid time\n"); + return -EINVAL; + } + tm->tm_sec = bcd2bin(regs[0] & 0x7F); tm->tm_min = bcd2bin(regs[1] & 0x7F); tm->tm_hour = bcd2bin(regs[2] & 0x3F); /* rtc hr 0-23 */ -- 2.7.0.rc3