From patchwork Wed Jul 12 08:04:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Gaignard X-Patchwork-Id: 107468 Delivered-To: patch@linaro.org Received: by 10.182.45.195 with SMTP id p3csp607695obm; Wed, 12 Jul 2017 01:13:37 -0700 (PDT) X-Received: by 10.98.196.86 with SMTP id y83mr54970992pff.129.1499847217142; Wed, 12 Jul 2017 01:13:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499847217; cv=none; d=google.com; s=arc-20160816; b=lreJtsVZLR3s5CDj0ftpgDaA6Bwvavu5cS3risSp2tG9bABxEfqvQ5h6lRkS/5hjFX Gar0jsZ4hS6/QYl39fxCPoyjEH4NTJxNRgxse1HhIuKKU2y5AGslfgsK3SaGG0zF9RI8 zY5G7E9fge9EKHLFg2dAL5dW4VdRJdye+ZFVpaFTpC9nTtS327l04yaOee2DVHt6R6DG mbxSxWeYHmQT+gcTaorxSfx4Al7e26Bjc2P2zbc4SYgxyLUQHkcQEolMtfq0/pf5pgR+ 1hckMgA3IT03o/5D/Mf4sqd0OWQMTyfwJHXlpy8NbDVXG+U18oh3ydCs91iLTIliwzsh fZug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=b27L2g3zH0Lqd6ThWdTn9hL3+nwV/qZ7X51iRfc7y+0=; b=GXbE+zkEGzy8YVKFsM3eV4wWLj/7nroWEV1m06zlLcY7pldzf1XIxIoVZ3VsVpoFpG GxOrD+VvD0WayhvfilOWHt+z8ICNddyhCVWZnzjq5YLCMXb1nPZAZAGqrT62ko4ZVUxN AbvfRodagS0/MlstI8JMVMjSltbJ9i2rAsMRCGhZyb0efbVZOnUnLPXken5duqNBqzyg zLvYLJKeg5hj1ZnDAmYenfIUpTVfIU5AJhIT+cUytvD/7WYoQWrM0bHLUxm6b3RE1cWR Z5u4aJfHEMnZtdtGSICFGxuJdpWblHh2rnJBtLSUGFJr+8/FZqRBqTf2GlYXLy8PiyyZ eBzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=ASw6PkKM; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m17si1451304pgn.86.2017.07.12.01.13.36; Wed, 12 Jul 2017 01:13:37 -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; dkim=pass header.i=@linaro.org header.b=ASw6PkKM; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933854AbdGLINS (ORCPT + 25 others); Wed, 12 Jul 2017 04:13:18 -0400 Received: from mail-wr0-f174.google.com ([209.85.128.174]:34179 "EHLO mail-wr0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756997AbdGLIFS (ORCPT ); Wed, 12 Jul 2017 04:05:18 -0400 Received: by mail-wr0-f174.google.com with SMTP id 77so22539779wrb.1 for ; Wed, 12 Jul 2017 01:05:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=b27L2g3zH0Lqd6ThWdTn9hL3+nwV/qZ7X51iRfc7y+0=; b=ASw6PkKMgsF+9BQP86W8Txyl57lSNDU4e0ed1ujKlHHXebcv9/VjNT69ijVNOjx0k8 QqxSTfaiNERzEluq5k1BX7IZwpeK1CwiRRvcVeB0jtpZ8ydxombZNvRJLjTUG+cY01ty 9FV645z94QFBGRdwsqWW/KqZWDFYmvMVNoG5s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=b27L2g3zH0Lqd6ThWdTn9hL3+nwV/qZ7X51iRfc7y+0=; b=TQY47s2wsRvlR0GyMZxwuBaaD9ckdos2uY8YIclueg1ieuTlHXcH/TNDv6QgxMuOgg 2dkzCSibSceKVyrutKaweCJUzofF1uDcV9PG/ERz2K5RPeWmTRVxC5HeUNjykscVhnxs Rp1r0sgkw3DKSpklN3YrFiAH9bi6RcsquWNOvJavx5rVx2hrBdTVwELfZKmx3q2110/Z suIp/lrXVGMdRSOaQ6bNiZkwC+DF+xIvTfi3xwTTg5opN9W1BumGTgyQ5GvSFS0VugAw zTcTbc9ypjVe+lvb6TCqj6GaSZxzaEtxxgOB/bpFxI4ThAbkqxSD+O/MDSY/o44Q3B0G xPKg== X-Gm-Message-State: AIVw112YDefYf6G6W3pbLOXwwbDl/saRMKQ8Vea3P+jYONgGuct7t/Pn c0E9jLiVmriiDe/5 X-Received: by 10.28.222.214 with SMTP id v205mr1565023wmg.68.1499846716631; Wed, 12 Jul 2017 01:05:16 -0700 (PDT) Received: from lmenx321.st.com. ([80.215.158.26]) by smtp.gmail.com with ESMTPSA id p34sm1430744wrc.66.2017.07.12.01.05.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Jul 2017 01:05:15 -0700 (PDT) From: Benjamin Gaignard To: benjamin.gaignard@linaro.org Cc: linaro-kernel@lists.linaro.org, Linus Walleij , Alessandro Zummo , Alexandre Belloni , rtc-linux@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 05/22] rtc: ab8500: stop using rtc deprecated functions Date: Wed, 12 Jul 2017 10:04:25 +0200 Message-Id: <1499846682-14093-6-git-send-email-benjamin.gaignard@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1499846682-14093-1-git-send-email-benjamin.gaignard@linaro.org> References: <1499846682-14093-1-git-send-email-benjamin.gaignard@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org rtc_time_to_tm() and rtc_tm_to_time() are deprecated because they rely on 32bits variables and that will make rtc break in y2038/2016. Stop using those two functions to safer 64bits ones. version 2: - fix compilation issues by using do_div() Signed-off-by: Benjamin Gaignard Acked-by: Linus Walleij CC: Linus Walleij CC: Alessandro Zummo CC: Alexandre Belloni CC: rtc-linux@googlegroups.com CC: linux-kernel@vger.kernel.org CC: linux-arm-kernel@lists.infradead.org --- drivers/rtc/rtc-ab8500.c | 53 +++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) -- 1.9.1 diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c index 24a0af6..4b8696f 100644 --- a/drivers/rtc/rtc-ab8500.c +++ b/drivers/rtc/rtc-ab8500.c @@ -71,7 +71,7 @@ /* Calculate the seconds from 1970 to 01-01-2000 00:00:00 */ static unsigned long get_elapsed_seconds(int year) { - unsigned long secs; + unsigned long long secs; struct rtc_time tm = { .tm_year = year - 1900, .tm_mday = 1, @@ -81,7 +81,7 @@ static unsigned long get_elapsed_seconds(int year) * This function calculates secs from 1970 and not from * 1900, even if we supply the offset from year 1900. */ - rtc_tm_to_time(&tm, &secs); + secs = rtc_tm_to_time64(&tm); return secs; } @@ -89,7 +89,7 @@ static int ab8500_rtc_read_time(struct device *dev, struct rtc_time *tm) { unsigned long timeout = jiffies + HZ; int retval, i; - unsigned long mins, secs; + unsigned long long mins, secs; unsigned char buf[ARRAY_SIZE(ab8500_rtc_time_regs)]; u8 value; @@ -130,7 +130,7 @@ static int ab8500_rtc_read_time(struct device *dev, struct rtc_time *tm) /* Add back the initially subtracted number of seconds */ secs += get_elapsed_seconds(AB8500_RTC_EPOCH); - rtc_time_to_tm(secs, tm); + rtc_time64_to_tm(secs, tm); return rtc_valid_tm(tm); } @@ -138,7 +138,7 @@ static int ab8500_rtc_set_time(struct device *dev, struct rtc_time *tm) { int retval, i; unsigned char buf[ARRAY_SIZE(ab8500_rtc_time_regs)]; - unsigned long no_secs, no_mins, secs = 0; + unsigned long long no_secs, secs = 0; if (tm->tm_year < (AB8500_RTC_EPOCH - 1900)) { dev_dbg(dev, "year should be equal to or greater than %d\n", @@ -147,7 +147,7 @@ static int ab8500_rtc_set_time(struct device *dev, struct rtc_time *tm) } /* Get the number of seconds since 1970 */ - rtc_tm_to_time(tm, &secs); + secs = rtc_tm_to_time64(tm); /* * Convert it to the number of seconds since 01-01-2000 00:00:00, since @@ -155,18 +155,16 @@ static int ab8500_rtc_set_time(struct device *dev, struct rtc_time *tm) */ secs -= get_elapsed_seconds(AB8500_RTC_EPOCH); - no_mins = secs / 60; - - no_secs = secs % 60; + no_secs = do_div(secs, 60); /* Make the seconds count as per the RTC resolution */ no_secs = no_secs * COUNTS_PER_SEC; buf[4] = no_secs & 0xFF; buf[3] = (no_secs >> 8) & 0xFF; - buf[2] = no_mins & 0xFF; - buf[1] = (no_mins >> 8) & 0xFF; - buf[0] = (no_mins >> 16) & 0xFF; + buf[2] = secs & 0xFF; + buf[1] = (secs >> 8) & 0xFF; + buf[0] = (secs >> 16) & 0xFF; for (i = 0; i < ARRAY_SIZE(ab8500_rtc_time_regs); i++) { retval = abx500_set_register_interruptible(dev, AB8500_RTC, @@ -185,7 +183,7 @@ static int ab8500_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) int retval, i; u8 rtc_ctrl, value; unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; - unsigned long secs, mins; + unsigned long long secs, mins; /* Check if the alarm is enabled or not */ retval = abx500_get_register_interruptible(dev, AB8500_RTC, @@ -214,7 +212,7 @@ static int ab8500_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) /* Add back the initially subtracted number of seconds */ secs += get_elapsed_seconds(AB8500_RTC_EPOCH); - rtc_time_to_tm(secs, &alarm->time); + rtc_time64_to_tm(secs, &alarm->time); return rtc_valid_tm(&alarm->time); } @@ -230,7 +228,7 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) { int retval, i; unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; - unsigned long mins, secs = 0, cursec = 0; + unsigned long long secs = 0, cursec = 0; struct rtc_time curtm; if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) { @@ -240,7 +238,7 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) } /* Get the number of seconds since 1970 */ - rtc_tm_to_time(&alarm->time, &secs); + secs = rtc_tm_to_time64(&alarm->time); /* * Check whether alarm is set less than 1min. @@ -248,7 +246,7 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) * return -EINVAL, so UIE EMUL can take it up, incase of UIE_ON */ ab8500_rtc_read_time(dev, &curtm); /* Read current time */ - rtc_tm_to_time(&curtm, &cursec); + cursec = rtc_tm_to_time64(&curtm); if ((secs - cursec) < 59) { dev_dbg(dev, "Alarm less than 1 minute not supported\r\n"); return -EINVAL; @@ -260,11 +258,11 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) */ secs -= get_elapsed_seconds(AB8500_RTC_EPOCH); - mins = secs / 60; + do_div(secs, 60); - buf[2] = mins & 0xFF; - buf[1] = (mins >> 8) & 0xFF; - buf[0] = (mins >> 16) & 0xFF; + buf[2] = secs & 0xFF; + buf[1] = (secs >> 8) & 0xFF; + buf[0] = (secs >> 16) & 0xFF; /* Set the alarm time */ for (i = 0; i < ARRAY_SIZE(ab8500_rtc_alarm_regs); i++) { @@ -281,7 +279,7 @@ static int ab8540_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) { int retval, i; unsigned char buf[ARRAY_SIZE(ab8540_rtc_alarm_regs)]; - unsigned long mins, secs = 0; + unsigned long long secs = 0; if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) { dev_dbg(dev, "year should be equal to or greater than %d\n", @@ -290,18 +288,17 @@ static int ab8540_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) } /* Get the number of seconds since 1970 */ - rtc_tm_to_time(&alarm->time, &secs); + secs = rtc_tm_to_time64(&alarm->time); /* * Convert it to the number of seconds since 01-01-2000 00:00:00 */ secs -= get_elapsed_seconds(AB8500_RTC_EPOCH); - mins = secs / 60; - buf[3] = secs % 60; - buf[2] = mins & 0xFF; - buf[1] = (mins >> 8) & 0xFF; - buf[0] = (mins >> 16) & 0xFF; + buf[3] = do_div(secs, 60); + buf[2] = secs & 0xFF; + buf[1] = (secs >> 8) & 0xFF; + buf[0] = (secs >> 16) & 0xFF; /* Set the alarm time */ for (i = 0; i < ARRAY_SIZE(ab8540_rtc_alarm_regs); i++) {