From patchwork Tue Oct 19 13:17:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 12569853 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BB23FC433F5 for ; Tue, 19 Oct 2021 13:17:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A0C5661374 for ; Tue, 19 Oct 2021 13:17:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231563AbhJSNTo (ORCPT ); Tue, 19 Oct 2021 09:19:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230097AbhJSNTn (ORCPT ); Tue, 19 Oct 2021 09:19:43 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72C90C06161C for ; Tue, 19 Oct 2021 06:17:30 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id y12so13393287eda.4 for ; Tue, 19 Oct 2021 06:17:30 -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 :mime-version:content-transfer-encoding; bh=60hPcdV0UWbpyl0GNuy8OVoEeD5Onu1pwXHnAZlxS8M=; b=XAupBd+cIZzEi1k87JGl3WRoxC9ij6GdlswhnL3eSxkOpZZ6260HB7c7Tm9d6FslzY S0MKo3SFHywQ8TNWjkiiup2u31aOBSi2G5dj1cC5UwuqWrear+WSHHXsT8RnoVdwnJSF VLJJ5LZe+bKz8ITWRZNEAdAsoAOh6/PdfkWdPfHBGQMVJUKzdIgfdIbCW5Jpccqxn800 +Z1nK1Gn3bdV1PlHJXqZnhai1gyE/oTnoVIXflwZR1aiXo9T8HRT+43t+Q8Hkqgw4MVj asnVUhMbq/TjGk8QcupRK9OHT2xrzq+4zx6BFQJNO8h0CbOayX0ECgZ1lxar2uQex5Gc 2rDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=60hPcdV0UWbpyl0GNuy8OVoEeD5Onu1pwXHnAZlxS8M=; b=jUF2quH1UMbV+IRQVBxUTv4P/MorcRYsC9LKPo1/9XpPQkoo7SzqSyvFU16fPciiQ3 AZEYiC31MI+jnvOrVxggk3MEtDrWD8vdJeh2ZTTDaDcceGzx4ntERxnPUEZ/RLP8W7oB Z4x0uzw+2nCFURXsvPAgH/bq72E2W1LAxLaq2vxqdWpGQ9tA0eqwmIS73w6qwCwWhpcn Luf8BXPScPbVkDFEv1FR1eNGxTKlH4KJd1WPYAoqdCO2DrOilNEcGPnEu5mHXSZgW1nx JVhRtR8+g680QaAoUNHRwa+4TnLVnRgWCEdangv8um/HyH8kaOGDnQijVxPeHGAJcDw/ 2XrQ== X-Gm-Message-State: AOAM530+atHj2hjGfUMjFoOG2xYeyxq1qaYQCIJy99KnQASmqc0X81W1 opq53SlVrR+28YPUsJpQYkRmhQ== X-Google-Smtp-Source: ABdhPJzjxzXjeAtY13jdbx0KsAZF/NotrJZ337C3d45J5MK1Yqceqvq9sAlvWPOnXnJHYNxrXzpvLA== X-Received: by 2002:a50:e188:: with SMTP id k8mr55865180edl.119.1634649448087; Tue, 19 Oct 2021 06:17:28 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id se12sm10337657ejb.88.2021.10.19.06.17.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Oct 2021 06:17:27 -0700 (PDT) From: Sam Protsenko To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] rtc: s3c: Remove usage of devm_rtc_device_register() Date: Tue, 19 Oct 2021 16:17:21 +0300 Message-Id: <20211019131724.3109-2-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211019131724.3109-1-semen.protsenko@linaro.org> References: <20211019131724.3109-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org devm_rtc_device_register() is deprecated. Use devm_rtc_allocate_device() and devm_rtc_register_device() API instead. This change doesn't change the behavior, but allows for further improvements. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski --- drivers/rtc/rtc-s3c.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index e57d3ca70a78..10e591794276 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -447,15 +447,18 @@ static int s3c_rtc_probe(struct platform_device *pdev) device_init_wakeup(&pdev->dev, 1); - /* register RTC and exit */ - info->rtc = devm_rtc_device_register(&pdev->dev, "s3c", &s3c_rtcops, - THIS_MODULE); + info->rtc = devm_rtc_allocate_device(&pdev->dev); if (IS_ERR(info->rtc)) { - dev_err(&pdev->dev, "cannot attach rtc\n"); ret = PTR_ERR(info->rtc); goto err_nortc; } + info->rtc->ops = &s3c_rtcops; + + ret = devm_rtc_register_device(info->rtc); + if (ret) + goto err_nortc; + ret = devm_request_irq(&pdev->dev, info->irq_alarm, s3c_rtc_alarmirq, 0, "s3c2410-rtc alarm", info); if (ret) { From patchwork Tue Oct 19 13:17:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 12569859 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E9B8EC43219 for ; Tue, 19 Oct 2021 13:17:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D74EE6137C for ; Tue, 19 Oct 2021 13:17:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235843AbhJSNT5 (ORCPT ); Tue, 19 Oct 2021 09:19:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235809AbhJSNT4 (ORCPT ); Tue, 19 Oct 2021 09:19:56 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CB2AC061769 for ; Tue, 19 Oct 2021 06:17:43 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id g10so12718157edj.1 for ; Tue, 19 Oct 2021 06:17:43 -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 :mime-version:content-transfer-encoding; bh=fVwmCQe1Imk01zVn1XGf4Bgbl7TXtX3AHgpVKUdqV64=; b=ST3pve/0QlrMuEbgKABJjXfLo42Qd+a53fnDzzVj9AE/zpYv88IEh4W3G8YvTWuPt/ 3XSHXX/cJ+JxhCNsWHRxUF5BIUhjNJ+TH+LC1Bvx/ibreBorIJfps+YwXCmkCRnicSjv yC5q1h6iihDGhhV6lFELl1TMNcu4UpUqhcrIqx7hytZ2Rk7rq8uI5tT1PXGqBNj6xYPk iNhLImzJ5XKfhW0qEgy4aFXSQLL8DEtrVxRqMfpi4BLzj1KprDkhBmFHCI3sRvVkSbb+ lNHCHP5ZKcpe1MI5kpwFWO/6fVybZl9G4g3lRDswu0iikoM2M7yPVtouvHwXnS0KHchG 1oKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fVwmCQe1Imk01zVn1XGf4Bgbl7TXtX3AHgpVKUdqV64=; b=8Cv07Qa0RHOUSa2xr6o/+UkvFSpZ8sbeB72rLqOzx9KpsL9Mzkkm8kQODGn9EFZdo0 60ZIxnceIa8N465zKxWqf4gfmQpABmFuFRXoaQ9x2mG7S6KSS9S0p5RSmlKDAvSji18o 4hkVffL/9o8DeEhc64ls/P4DnyeS6mR4culcMsgANG3gyI0EkPkLCUcEzQSWA0dpuaU5 tydLC9il2wqqLgP7F8/xUu0rUz1G+7rLmKk5WDAlsMgaWU3VLFVwe9QoD1QvZCYaxC67 qUbg1wLkW9lltOOW5IxMcmhtVSfFYWcX4oKXMF9mipc49aOKJSWdWLGYt9mb68fYdrkf iuRQ== X-Gm-Message-State: AOAM533hWfc2HwbRsrajjN89mHqgK08xyJdxA3b0IAYPBNL0zbtInuuE D5Ybku1PeYbWKaTlBXlCclrD+g== X-Google-Smtp-Source: ABdhPJxHpjVbKzi+3gjGSMjnf9tMaqp16jK7/fWlsQgqmLcR5Yz8Wq3iH0ERFpFpw5GAOvuk5ox58Q== X-Received: by 2002:a17:907:d1e:: with SMTP id gn30mr37726126ejc.272.1634649450063; Tue, 19 Oct 2021 06:17:30 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id e22sm12192568edu.35.2021.10.19.06.17.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Oct 2021 06:17:29 -0700 (PDT) From: Sam Protsenko To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] rtc: s3c: Add time range Date: Tue, 19 Oct 2021 16:17:22 +0300 Message-Id: <20211019131724.3109-3-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211019131724.3109-1-semen.protsenko@linaro.org> References: <20211019131724.3109-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org This RTC driver only accepts dates from 2000 to 2099 year. It starts counting from 2000 to avoid Y2K problem, and S3C RTC only supports 100 years range. Provide this info to RTC framework. Signed-off-by: Sam Protsenko --- drivers/rtc/rtc-s3c.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 10e591794276..d9994efd70ef 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -454,6 +454,8 @@ static int s3c_rtc_probe(struct platform_device *pdev) } info->rtc->ops = &s3c_rtcops; + info->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; + info->rtc->range_max = RTC_TIMESTAMP_END_2099; ret = devm_rtc_register_device(info->rtc); if (ret) From patchwork Tue Oct 19 13:17:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 12569857 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81D4FC43217 for ; Tue, 19 Oct 2021 13:17:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6791661378 for ; Tue, 19 Oct 2021 13:17:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235829AbhJSNT4 (ORCPT ); Tue, 19 Oct 2021 09:19:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235838AbhJSNT4 (ORCPT ); Tue, 19 Oct 2021 09:19:56 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24A60C061746 for ; Tue, 19 Oct 2021 06:17:43 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id a25so12733554edx.8 for ; Tue, 19 Oct 2021 06:17:43 -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 :mime-version:content-transfer-encoding; bh=5YnSV2WmSpYW3PQc/jQwM9rWHR/XNd6B5D4ZvC4oHuY=; b=rNAcoTay7AsnMHiPkpaF40XiXzzMBw2UKeG92UNqJV9iv99TRyiiGVGejWyrLeM9xP KvUINaMYNxMJcrpA2AtQ3nE7JuVfpSVIvy3zxKvV04AG4bU8QUEpXdS5e9uOr9Fsg9Qu tQeymZ0sroVPHIoLucrfkVgS77cawo7aGWXj6hvlx6SxqjWQXP/+AzKtQ381eOCOSxLk NEV57dz+pfpjojXeUvGZnkQpqJYir03EIVkG1eTInT036JmcIxdMV6ShfMfun9D33jCU yH2V6R1JzilLNuh/2PA9ZfQIYF9Unltcesv3S3QefDDnY8L2dZcskXf/dUHuRXDgg+HE m08w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5YnSV2WmSpYW3PQc/jQwM9rWHR/XNd6B5D4ZvC4oHuY=; b=sYx3IUWVg9XpaoNETBZJ70l4NkoBXREJppTWXNtr8DBGqmUK0IxQz3zO3QJfkGUc+G k2j5wYPi1lDo88xDLBAadCqOrs1FcYfkPiQFl1oGcLOmSGBk/ab4sQmCabcu5v2F23k1 F3aCczh6uO2Kju3nsEYu5rZdz6WX3IFYXWfEoU1IaTMC7N23XhV2fYxMvIa8IbKLiNmE 969sEQJyTeEx9VDtqrSA4Do2kylsX2QD/CKjyBbWSb+8v4OWfjHz8HCpuG3LXPPpUQ87 zvk6PIxpL3JtYtbSEhJ/2CipH4OfMd0YKwfC2TLVPaKb83HuC1NIsLWnJgOkmscMgLS7 +Q+w== X-Gm-Message-State: AOAM533itsrQhgvPBVMEOep85eht1islfoLQM1vfkCL0Ay3d1yrdNCsd vpdKeENPAcM6DIC7FeofQHj0Jw== X-Google-Smtp-Source: ABdhPJyBARKHQoOqkXzfsy2YP5Fvk8FuxRLrNXgccGNZtj9uAo035bbgTDknejv/E9Dh0IJD3ju9PA== X-Received: by 2002:a17:906:4fd6:: with SMTP id i22mr37353674ejw.92.1634649451800; Tue, 19 Oct 2021 06:17:31 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id o25sm11271775edq.40.2021.10.19.06.17.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Oct 2021 06:17:31 -0700 (PDT) From: Sam Protsenko To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] rtc: s3c: Extract read/write IO into separate functions Date: Tue, 19 Oct 2021 16:17:23 +0300 Message-Id: <20211019131724.3109-4-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211019131724.3109-1-semen.protsenko@linaro.org> References: <20211019131724.3109-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Create dedicated functions for I/O operations and BCD conversion. It can be useful to separete those from representation conversion and other stuff found in RTC callbacks, e.g. for initializing RTC registers. This patch does not introduce any functional changes, it's merely refactoring change. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski --- drivers/rtc/rtc-s3c.c | 98 +++++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 37 deletions(-) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index d9994efd70ef..238928e29fbc 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -127,10 +127,9 @@ static int s3c_rtc_setaie(struct device *dev, unsigned int enabled) return ret; } -/* Time read/write */ -static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) +/* Read time from RTC and convert it from BCD */ +static int s3c_rtc_read_time(struct s3c_rtc *info, struct rtc_time *tm) { - struct s3c_rtc *info = dev_get_drvdata(dev); unsigned int have_retried = 0; int ret; @@ -139,54 +138,40 @@ static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) return ret; retry_get_time: - rtc_tm->tm_min = readb(info->base + S3C2410_RTCMIN); - rtc_tm->tm_hour = readb(info->base + S3C2410_RTCHOUR); - rtc_tm->tm_mday = readb(info->base + S3C2410_RTCDATE); - rtc_tm->tm_mon = readb(info->base + S3C2410_RTCMON); - rtc_tm->tm_year = readb(info->base + S3C2410_RTCYEAR); - rtc_tm->tm_sec = readb(info->base + S3C2410_RTCSEC); - - /* the only way to work out whether the system was mid-update + tm->tm_min = readb(info->base + S3C2410_RTCMIN); + tm->tm_hour = readb(info->base + S3C2410_RTCHOUR); + tm->tm_mday = readb(info->base + S3C2410_RTCDATE); + tm->tm_mon = readb(info->base + S3C2410_RTCMON); + tm->tm_year = readb(info->base + S3C2410_RTCYEAR); + tm->tm_sec = readb(info->base + S3C2410_RTCSEC); + + /* + * The only way to work out whether the system was mid-update * when we read it is to check the second counter, and if it * is zero, then we re-try the entire read */ - - if (rtc_tm->tm_sec == 0 && !have_retried) { + if (tm->tm_sec == 0 && !have_retried) { have_retried = 1; goto retry_get_time; } - rtc_tm->tm_sec = bcd2bin(rtc_tm->tm_sec); - rtc_tm->tm_min = bcd2bin(rtc_tm->tm_min); - rtc_tm->tm_hour = bcd2bin(rtc_tm->tm_hour); - rtc_tm->tm_mday = bcd2bin(rtc_tm->tm_mday); - rtc_tm->tm_mon = bcd2bin(rtc_tm->tm_mon); - rtc_tm->tm_year = bcd2bin(rtc_tm->tm_year); - s3c_rtc_disable_clk(info); - rtc_tm->tm_year += 100; - rtc_tm->tm_mon -= 1; + tm->tm_sec = bcd2bin(tm->tm_sec); + tm->tm_min = bcd2bin(tm->tm_min); + tm->tm_hour = bcd2bin(tm->tm_hour); + tm->tm_mday = bcd2bin(tm->tm_mday); + tm->tm_mon = bcd2bin(tm->tm_mon); + tm->tm_year = bcd2bin(tm->tm_year); - dev_dbg(dev, "read time %ptR\n", rtc_tm); return 0; } -static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) +/* Convert time to BCD and write it to RTC */ +static int s3c_rtc_write_time(struct s3c_rtc *info, const struct rtc_time *tm) { - struct s3c_rtc *info = dev_get_drvdata(dev); - int year = tm->tm_year - 100; int ret; - dev_dbg(dev, "set time %ptR\n", tm); - - /* we get around y2k by simply not supporting it */ - - if (year < 0 || year >= 100) { - dev_err(dev, "rtc only supports 100 years\n"); - return -EINVAL; - } - ret = s3c_rtc_enable_clk(info); if (ret) return ret; @@ -195,14 +180,53 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) writeb(bin2bcd(tm->tm_min), info->base + S3C2410_RTCMIN); writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_RTCHOUR); writeb(bin2bcd(tm->tm_mday), info->base + S3C2410_RTCDATE); - writeb(bin2bcd(tm->tm_mon + 1), info->base + S3C2410_RTCMON); - writeb(bin2bcd(year), info->base + S3C2410_RTCYEAR); + writeb(bin2bcd(tm->tm_mon), info->base + S3C2410_RTCMON); + writeb(bin2bcd(tm->tm_year), info->base + S3C2410_RTCYEAR); s3c_rtc_disable_clk(info); return 0; } +static int s3c_rtc_gettime(struct device *dev, struct rtc_time *tm) +{ + struct s3c_rtc *info = dev_get_drvdata(dev); + int ret; + + ret = s3c_rtc_read_time(info, tm); + if (ret) + return ret; + + /* Convert internal representation to actual date/time */ + tm->tm_year += 100; + tm->tm_mon -= 1; + + dev_dbg(dev, "read time %ptR\n", tm); + return 0; +} + +static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) +{ + struct s3c_rtc *info = dev_get_drvdata(dev); + struct rtc_time rtc_tm = *tm; + + dev_dbg(dev, "set time %ptR\n", tm); + + /* + * Convert actual date/time to internal representation. + * We get around Y2K by simply not supporting it. + */ + rtc_tm.tm_year -= 100; + rtc_tm.tm_mon += 1; + + if (rtc_tm.tm_year < 0 || rtc_tm.tm_year >= 100) { + dev_err(dev, "rtc only supports 100 years\n"); + return -EINVAL; + } + + return s3c_rtc_write_time(info, &rtc_tm); +} + static int s3c_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm) { struct s3c_rtc *info = dev_get_drvdata(dev); From patchwork Tue Oct 19 13:17:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 12569861 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79AC4C433EF for ; Tue, 19 Oct 2021 13:17:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 67DB760F8F for ; Tue, 19 Oct 2021 13:17:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235857AbhJSNT7 (ORCPT ); Tue, 19 Oct 2021 09:19:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235853AbhJSNT6 (ORCPT ); Tue, 19 Oct 2021 09:19:58 -0400 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0336AC06161C for ; Tue, 19 Oct 2021 06:17:45 -0700 (PDT) Received: by mail-ed1-x52c.google.com with SMTP id i20so12686059edj.10 for ; Tue, 19 Oct 2021 06:17:45 -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 :mime-version:content-transfer-encoding; bh=ewk+JEJPIl628LqXQys4kMJx/dyvNqWJyRtOhvqF++g=; b=Yc4z25m9SraOPeiH3fHVJW5xx3KlcCixhz0k7H2JTkNHVZdcA36BlPe0AlbS8b0JD4 c5v5LU1YLvlq1oTAST4LZxTg0Z7wWnvH46hZLeFFhexMx8Oroz3dPwcIxONA0984EFnG bh/lJoBGN2Wzw9vijQT6GPu4pdi21lcRZTGh7DhbtdgQzfvL8++z7CBTPG3OtaA4s2p+ IT3aKeAVa6DURrDiNwZ7oKDWP8n0lJVGWcq0JLMU/ytXAWQ/D6JwGVaSVCbHyKazf3/s DMtQwJQQ7fax80a/UsxkGD7zKoRuRGOcxk890Cw7spYDADMvr4SVrz0lTXCU8Kx+pl0i p5mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ewk+JEJPIl628LqXQys4kMJx/dyvNqWJyRtOhvqF++g=; b=EZ6QN+59tku3km4ES4qy19zlVdi8RtBDqpIcmzurGtY6eLrn1HAV/tllS9pHusnEDt +8Vfq5I/E63nBDSX7EvxRYxruhYZwz1wLRHFiuHr1XLyk7v8uvOxH1IZKHY972OzG8U4 ZUjKT8Kim3n4Q4Jd4ZKzPodYdltXUtb3KHTFTuSXSvjiaBSDpvdIsvpR8yxg2iVdNdCR iDEsC8wrsesUXjF1PO8uRc5z1Capj39AZl/J9NZwSNHFlP0LwwzTIyiMF6K52KHF0Vlt RZkwPElbDHWBvM3YzxZ51kV9ENpqzf7JzodNOsYkEjJIp/x8zK3s2FxIzt7a/2Sbgp7/ Pkwg== X-Gm-Message-State: AOAM530YvQJo7dq4H4sVNYP0arQI9nB9oT+wWt+QPYW3C0olDVY4VdR2 x8bT0RhlJFCpOHZr42ro9hBcmA== X-Google-Smtp-Source: ABdhPJziJB5SbEcOtz0oFtQUCLbbWw4+8Tt+U0AspLInaG+PMwo/xOaYy5WYP43QRMA2QWE2c9rGRA== X-Received: by 2002:a17:906:64a:: with SMTP id t10mr39685589ejb.5.1634649453375; Tue, 19 Oct 2021 06:17:33 -0700 (PDT) Received: from localhost ([31.134.121.151]) by smtp.gmail.com with ESMTPSA id w11sm11336968edl.87.2021.10.19.06.17.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Oct 2021 06:17:33 -0700 (PDT) From: Sam Protsenko To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski Cc: linux-rtc@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] rtc: s3c: Fix RTC read on first boot Date: Tue, 19 Oct 2021 16:17:24 +0300 Message-Id: <20211019131724.3109-5-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211019131724.3109-1-semen.protsenko@linaro.org> References: <20211019131724.3109-1-semen.protsenko@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org On first RTC boot it has the month register value set to 0. Unconditional subtracting of 1 subsequently in s3c_rtc_gettime() leads to the next error message in kernel log: hctosys: unable to read the hardware clock That happens in s3c_rtc_probe() when trying to register the RTC, which in turn tries to read and validate the time. Initialize RTC date/time registers to valid values in probe function on the first boot to prevent such errors. Signed-off-by: Sam Protsenko --- drivers/rtc/rtc-s3c.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 238928e29fbc..c7e763bcf61f 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -403,6 +403,28 @@ static int s3c_rtc_remove(struct platform_device *pdev) return 0; } +/* Set RTC with valid date/time values on first boot */ +static int s3c_rtc_init_time(struct s3c_rtc *info) +{ + struct rtc_time tm; + int ret; + + ret = s3c_rtc_read_time(info, &tm); + if (ret) + return ret; + + /* Only init RTC date/time on first boot */ + if (tm.tm_mday > 0) + return 0; + + /* Init date/time: 1 Jan 2000 00:00:00 */ + memset(&tm, 0, sizeof(struct rtc_time)); + tm.tm_mday = 1; /* tm_mday min valid value is 1 */ + tm.tm_mon = 1; /* January in internal representation */ + + return s3c_rtc_write_time(info, &tm); +} + static int s3c_rtc_probe(struct platform_device *pdev) { struct s3c_rtc *info = NULL; @@ -471,6 +493,10 @@ static int s3c_rtc_probe(struct platform_device *pdev) device_init_wakeup(&pdev->dev, 1); + ret = s3c_rtc_init_time(info); + if (ret) + goto err_nortc; + info->rtc = devm_rtc_allocate_device(&pdev->dev); if (IS_ERR(info->rtc)) { ret = PTR_ERR(info->rtc);