From nobody Sun Apr 12 20:05:17 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2664CC4332F for ; Mon, 19 Dec 2022 19:09:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232125AbiLSTJe (ORCPT ); Mon, 19 Dec 2022 14:09:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231881AbiLSTJ3 (ORCPT ); Mon, 19 Dec 2022 14:09:29 -0500 Received: from mail-yw1-x1131.google.com (mail-yw1-x1131.google.com [IPv6:2607:f8b0:4864:20::1131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4083D7649 for ; Mon, 19 Dec 2022 11:09:27 -0800 (PST) Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-43ea87d0797so112122017b3.5 for ; Mon, 19 Dec 2022 11:09:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sparkcharge.io; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=F/CCMZCQj5dF++B+69iBkvBLnhcDqwiWIOUWa6+GvPo=; b=fPnsy+VG2rQkfW2tV40XYBIFVk636fd8vzN6bHaj9QYsmdNG71O8WJuAHbC/g9wgxu Q5NKMzQu9kOIB1g/XDA6Ho/FfSDTyzRBtIRfjWPjvkmqjx9al5mWf5TAuyaFdEbrmV4H YnWSsrbo9sQKWDD/Kp42iP164mM4dQj6t7liOgH/VyBAdW7wWgfXCGiM5uQAailkmGAT 17qFRfAFqiFGZEUYgvqgRUvzlZzfSEPJ0FpDsBUHufvC/xgdzDGmNyGn6HU+tufo+mPQ lIRwGGvBMcBuJ6sBn+hIYHmC0+GuIzDvNy9akoRC7KrJav9KWNrIBPIIYafd2LvADxm7 9IHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=F/CCMZCQj5dF++B+69iBkvBLnhcDqwiWIOUWa6+GvPo=; b=6Krd9W8UiX1aEtl1rHPuATo4qxm56muoDU+kAQD7MClk4vAmD25uh9VTyfpsHeW6+1 L38tB0ukSHIfhmHo8v54Bw45r87rilQkdHgZSuYCiDxQUEKimRrEfPrJ8VcT//bkka2l hLxZzs4nG6X9pIMl1zoCEgZ0QDIFn/JEzzxbf/xUJKuaYWzb1z6t3Nomr34w7Y0UsNXY r2DEvRKmi64kMmLOWEZqzuuiOR23JYq30i/RKimzCXj5oB95jxfBs1W4wnu9XL1znEmZ /SvSD+vbhS0A9kIcpQSnclk78xE6h7L4iK0qhzazgBplGQntu8NrS79gyo2h80eNmAVb yQGQ== X-Gm-Message-State: AFqh2kpW5W51l6pKsrqqEtvoa8HX6gmRVqX6dwJaFxhHVB+OSjYaffff T+7krDc74kzl3NfGGE9/EypzesHMN9pcT3jZBhc= X-Google-Smtp-Source: AMrXdXuDeoCCe5+pQd2jPM+A4Tp7WYpi23W3eybeauxH0ZCFWkyBWziiaQSPidg+sZv51Spz27wO/w== X-Received: by 2002:a81:1205:0:b0:393:2287:bed9 with SMTP id 5-20020a811205000000b003932287bed9mr8103033yws.40.1671476966387; Mon, 19 Dec 2022 11:09:26 -0800 (PST) Received: from localhost.localdomain (c-66-31-16-167.hsd1.ma.comcast.net. [66.31.16.167]) by smtp.gmail.com with ESMTPSA id i16-20020a05620a249000b006fa9d101775sm7503743qkn.33.2022.12.19.11.09.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 11:09:26 -0800 (PST) From: Dennis Lambe Jr To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski , Rob Herring Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, Alexander Bigga , Dennis Lambe Jr Subject: [PATCH 1/3] rtc: m41t80: probe: use IS_ENABLED for CONFIG_OF Date: Mon, 19 Dec 2022 19:09:13 +0000 Message-Id: <20221219190915.3912384-2-dennis@sparkcharge.io> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221219190915.3912384-1-dennis@sparkcharge.io> References: <20221219190915.3912384-1-dennis@sparkcharge.io> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The style guide recommends IS_ENABLED rather than ifdef for wrapping conditional code wherever possible. Functions that are only called on DeviceTree platforms would otherwise need to be cluttered up with __maybe_unused, which is especially undesireable if there's nothing inherently DT-specific about those functions. Signed-off-by: Dennis Lambe Jr --- drivers/rtc/rtc-m41t80.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c index 494052dbd39f..f963b76e5fc0 100644 --- a/drivers/rtc/rtc-m41t80.c +++ b/drivers/rtc/rtc-m41t80.c @@ -909,10 +909,11 @@ static int m41t80_probe(struct i2c_client *client) if (IS_ERR(m41t80_data->rtc)) return PTR_ERR(m41t80_data->rtc); =20 -#ifdef CONFIG_OF - wakeup_source =3D of_property_read_bool(client->dev.of_node, - "wakeup-source"); -#endif + if (IS_ENABLED(CONFIG_OF)) { + wakeup_source =3D of_property_read_bool(client->dev.of_node, + "wakeup-source"); + } + if (client->irq > 0) { rc =3D devm_request_threaded_irq(&client->dev, client->irq, NULL, m41t80_handle_irq, --=20 2.25.1 From nobody Sun Apr 12 20:05:17 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7693CC4332F for ; Mon, 19 Dec 2022 19:10:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232249AbiLSTJl (ORCPT ); Mon, 19 Dec 2022 14:09:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232037AbiLSTJa (ORCPT ); Mon, 19 Dec 2022 14:09:30 -0500 Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65F46765E for ; Mon, 19 Dec 2022 11:09:29 -0800 (PST) Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-4407c61433bso97217327b3.9 for ; Mon, 19 Dec 2022 11:09:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sparkcharge.io; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NK5TSyyNAxFyXbebfxPbStKYwQ+QFfdsKkMuy6XtJfo=; b=OnUKpSFaN8t2aIjjI7uFwBz0cJMxPX5TKo3WgWz+MQStEMBcc7bguKH9u0uxdpr6F3 Bt15BepxBCOl+uLkZbEipvuRh5UB4JtcyOyaFAJDiVzrAA4865XBankn/vUFyA9Q9XsK ZA/2YByOv/XacUu+FETQdP6GwhzOUvHbuYxX2GV0ErgS6sYuBnCZtonZu2oq80SPXXQo gKFg0LkLXwNxAtI92p14Alx0r+zgEi4v5/S+HTN+7btBpbVz83e9aBESJg8dU3OUgmqP JPv6pO5I5Loi5vkh5q/Dkj2j86u4evVhaJh03QW5GTppxwBdhcHLUjX01BVHV96u4HNc 7zXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NK5TSyyNAxFyXbebfxPbStKYwQ+QFfdsKkMuy6XtJfo=; b=bg2yjTu87tgg/f2YOaCN8fmy8JM3ZrhvMwuGWHtn48jgXDnriERg7XiIMTdrcQvX4/ SLdmtKiqczPdOakkn7cTGaARVNfNp4qyW1nE9qzTPKQ1Rtl1TUVGKtCVgJ1R37jT9Vun F8+RhU0FDPdaN2TwzHGY2luu41nBz2DUABqAlMkH46fdB4iEXrfSfl+tlEzZB5iu4iyg 2vC/Z2WULR9o5D3z9+V3D+FX6XN0AkcX2mAjV55hipavxFwZnHbmqIMs00pikg1DTkLO To7LpaYBsJuRElOdo5ap2h8GdVOqleILOgVQlozPxG44/UjXXf+ZSKSR7sok8zahjTH7 bzqQ== X-Gm-Message-State: ANoB5pk/ImD27PyMbePPS6uTzKtA7CoypXkKagO59BztNW6qw9bEbYRP pNOk2aqzYKZgBlu2zcrLQkA/YQ== X-Google-Smtp-Source: AA0mqf44nMz5abpw0HK4kEBj2kKEH3vxLyWo3MJtQh8GEuw7y7qKmmjIxm/2+br+4bkTBKOW+LiDsg== X-Received: by 2002:a0d:dd10:0:b0:421:2aa5:7410 with SMTP id g16-20020a0ddd10000000b004212aa57410mr27132070ywe.28.1671476968392; Mon, 19 Dec 2022 11:09:28 -0800 (PST) Received: from localhost.localdomain (c-66-31-16-167.hsd1.ma.comcast.net. [66.31.16.167]) by smtp.gmail.com with ESMTPSA id i16-20020a05620a249000b006fa9d101775sm7503743qkn.33.2022.12.19.11.09.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 11:09:28 -0800 (PST) From: Dennis Lambe Jr To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski , Rob Herring Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, Alexander Bigga , Dennis Lambe Jr Subject: [PATCH 2/3] dt-bindings: m41t80: add xtal load capacitance Date: Mon, 19 Dec 2022 19:09:14 +0000 Message-Id: <20221219190915.3912384-3-dennis@sparkcharge.io> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221219190915.3912384-1-dennis@sparkcharge.io> References: <20221219190915.3912384-1-dennis@sparkcharge.io> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The ST m41t82 and m41t83 support programmable load capacitance from 3.5 pF to 17.4 pF. The hardware defaults to 12.5 pF. The accuracy of the xtal can be calibrated precisely by adjusting the load capacicance. Add default, minimum, and maximum for the standard rtc property quartz-load-femtofarads on compatible devices. Signed-off-by: Dennis Lambe Jr --- .../devicetree/bindings/rtc/st,m41t80.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Documentation/devicetree/bindings/rtc/st,m41t80.yaml b/Documen= tation/devicetree/bindings/rtc/st,m41t80.yaml index fc9c6da6483f..6b72580dc031 100644 --- a/Documentation/devicetree/bindings/rtc/st,m41t80.yaml +++ b/Documentation/devicetree/bindings/rtc/st,m41t80.yaml @@ -33,6 +33,11 @@ properties: "#clock-cells": const: 1 =20 + quartz-load-femtofarads: + default: 12500 + minimum: 3500 + maximum: 17375 + clock-output-names: maxItems: 1 description: From common clock binding to override the default output = clock name. @@ -44,8 +49,21 @@ properties: clock-frequency: const: 32768 =20 + wakeup-source: true + allOf: - $ref: rtc.yaml + - if: + not: + properties: + compatible: + contains: + enum: + - st,m41t82 + - st,m41t83 + then: + properties: + quartz-load-femtofarads: false =20 unevaluatedProperties: false =20 --=20 2.25.1 From nobody Sun Apr 12 20:05:17 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8ADCBC10F1B for ; Mon, 19 Dec 2022 19:10:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232319AbiLSTJp (ORCPT ); Mon, 19 Dec 2022 14:09:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232225AbiLSTJc (ORCPT ); Mon, 19 Dec 2022 14:09:32 -0500 Received: from mail-vs1-xe33.google.com (mail-vs1-xe33.google.com [IPv6:2607:f8b0:4864:20::e33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87649767E for ; Mon, 19 Dec 2022 11:09:31 -0800 (PST) Received: by mail-vs1-xe33.google.com with SMTP id i2so9720043vsc.1 for ; Mon, 19 Dec 2022 11:09:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sparkcharge.io; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jgeqi6RRPNuIjdr+16qci9xGfe9jHTKnAUBA+hjYEZ0=; b=l9uV4BXDAD5WYzX5RtFj0DSFO7r45JnCM5R+GSwpzQ+MYf3Zs6FnohRanraSbL6T/Y MT9Z+hvsCnmMrjTBbY5xIY8MgnbWuO5naHqFIEI/SZktQHpVEiUqT3++aS50N1Wt3EZ5 t+3RmofXh10aC4uaFWCaEBH8spJVR7cxf0uqbTE9ACtwBC6PjEsM1Vfjg4adJuvnfrkI tVZwcoRc0prA066wCuIsA1GKheSOrqEsTJyy7n6F6jA5tf0ma7O900BhgiPVGeZ5jsf6 1poeqa/1pdT6x32X2YRKI8p6pyhT/1nreegSU5zP7UAizz4tOYoJ2bRBm+0G1yYyu7ap DwDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jgeqi6RRPNuIjdr+16qci9xGfe9jHTKnAUBA+hjYEZ0=; b=SqPhkqJHksnwanQgEuXvY1JWCUKtKO57sPc0NfOr1Bb7StyheWPlMgK0alLK76EeLP yKaysVUWu5r6trGBPmZlt51JomRf+hjQrhCi/w53Ac0zdM40e6EAWr7h/D/RFmUkS6bp gSKoDSGMKP4jEzmt+Qe4hFgfmnVCtwaHrk7YPYB3ttamo37E+Imkx8+MP2rR95fX/9SP CkVdFYvXQPVMcZWjTFvcSf4NE6gs/GiLBr0zhYxR7qTXudpid3eBekBl9HXXnE4BlKzI +oL2R8Ok+sIel5TykAow3nPyaPNlSK7TKf1idfXBMBHZkGV+sSKwaogo4U8JlB/2K+89 m/wg== X-Gm-Message-State: ANoB5plePmni0egtL3Hwpo1Tp7nLSOBwbjj0J1CT84KaQbAujKxyZ+fw Frmln6wjWlxR6/r3DOIi+k5bE1fXaAItm2nwN+M= X-Google-Smtp-Source: AA0mqf7usAKjiXO8JfHSMKtYu24W8DxIyi44hhWI9KnUkd60DnhkFq514c89RQoESrq0dmEfUyZzew== X-Received: by 2002:a67:f04a:0:b0:3b3:7657:43a1 with SMTP id q10-20020a67f04a000000b003b3765743a1mr17193534vsm.19.1671476970553; Mon, 19 Dec 2022 11:09:30 -0800 (PST) Received: from localhost.localdomain (c-66-31-16-167.hsd1.ma.comcast.net. [66.31.16.167]) by smtp.gmail.com with ESMTPSA id i16-20020a05620a249000b006fa9d101775sm7503743qkn.33.2022.12.19.11.09.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 11:09:30 -0800 (PST) From: Dennis Lambe Jr To: Alessandro Zummo , Alexandre Belloni , Krzysztof Kozlowski , Rob Herring Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, Alexander Bigga , Dennis Lambe Jr Subject: [PATCH 3/3] rtc: m41t80: set xtal load capacitance from DT Date: Mon, 19 Dec 2022 19:09:15 +0000 Message-Id: <20221219190915.3912384-4-dennis@sparkcharge.io> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221219190915.3912384-1-dennis@sparkcharge.io> References: <20221219190915.3912384-1-dennis@sparkcharge.io> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add support for specifying the xtal load capacitance in the DT node for devices with an Analog Calibration register. the m41t82 and m41t83 support xtal load capacitance from 3.5 pF to 17.4 pF. If no xtal load capacitance is specified, the battery-backed register won't be modified. The hardware defaults to 12.5 pF on reset. Signed-off-by: Dennis Lambe Jr --- drivers/rtc/rtc-m41t80.c | 75 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c index f963b76e5fc0..85bde7130a4d 100644 --- a/drivers/rtc/rtc-m41t80.c +++ b/drivers/rtc/rtc-m41t80.c @@ -44,12 +44,17 @@ #define M41T80_REG_ALARM_MIN 0x0d #define M41T80_REG_ALARM_SEC 0x0e #define M41T80_REG_FLAGS 0x0f +#define M41T80_REG_AC 0x12 #define M41T80_REG_SQW 0x13 =20 #define M41T80_DATETIME_REG_SIZE (M41T80_REG_YEAR + 1) #define M41T80_ALARM_REG_SIZE \ (M41T80_REG_ALARM_SEC + 1 - M41T80_REG_ALARM_MON) =20 +#define M41T80_AC_MIN 3500 +#define M41T80_AC_MAX 17375 +#define M41T80_AC_DEFAULT 12500 + #define M41T80_SQW_MAX_FREQ 32768 =20 #define M41T80_SEC_ST BIT(7) /* ST: Stop Bit */ @@ -68,6 +73,7 @@ #define M41T80_FEATURE_SQ BIT(2) /* Squarewave feature */ #define M41T80_FEATURE_WD BIT(3) /* Extra watchdog resolution */ #define M41T80_FEATURE_SQ_ALT BIT(4) /* RSx bits are in reg 4 */ +#define M41T80_FEATURE_AC BIT(5) /* Analog calibration */ =20 static const struct i2c_device_id m41t80_id[] =3D { { "m41t62", M41T80_FEATURE_SQ | M41T80_FEATURE_SQ_ALT }, @@ -75,8 +81,10 @@ static const struct i2c_device_id m41t80_id[] =3D { { "m41t80", M41T80_FEATURE_SQ }, { "m41t81", M41T80_FEATURE_HT | M41T80_FEATURE_SQ}, { "m41t81s", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, - { "m41t82", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, - { "m41t83", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, + { "m41t82", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ + | M41T80_FEATURE_AC }, + { "m41t83", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ + | M41T80_FEATURE_AC }, { "m41st84", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, { "m41st85", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, { "m41st87", M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATURE_SQ }, @@ -108,11 +116,13 @@ static const __maybe_unused struct of_device_id m41t8= 0_of_match[] =3D { }, { .compatible =3D "st,m41t82", - .data =3D (void *)(M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATUR= E_SQ) + .data =3D (void *)(M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATUR= E_SQ + | M41T80_FEATURE_AC) }, { .compatible =3D "st,m41t83", - .data =3D (void *)(M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATUR= E_SQ) + .data =3D (void *)(M41T80_FEATURE_HT | M41T80_FEATURE_BL | M41T80_FEATUR= E_SQ + | M41T80_FEATURE_AC) }, { .compatible =3D "st,m41t84", @@ -405,6 +415,54 @@ static const struct rtc_class_ops m41t80_rtc_ops =3D { .alarm_irq_enable =3D m41t80_alarm_irq_enable, }; =20 +static u8 to_sign_magnitude_u8(int n) +{ + if (n < 0) + return 0x80 | -n; + return n; +} + +static int m41t80_encode_ac(int quartz_load) +{ + if (quartz_load < M41T80_AC_MIN || quartz_load > M41T80_AC_MAX) + return -EINVAL; + + /* + * register representation is the per-capacitor offset from its default + * value in units of 1/4 pF, in sign-magnitude form. + */ + return to_sign_magnitude_u8((quartz_load - M41T80_AC_DEFAULT) / 125); +} + +static int m41t80_set_ac(struct m41t80_data *m41t80_data, int quartz_load) +{ + struct i2c_client *client =3D m41t80_data->client; + struct device *dev =3D &client->dev; + int ret; + int ac; + + if (!(m41t80_data->features & M41T80_FEATURE_AC)) { + dev_err(dev, "analog calibration requested but not supported\n"); + return -EOPNOTSUPP; + } + + ac =3D m41t80_encode_ac(quartz_load); + if (ac < 0) { + dev_err(dev, "quartz load %d fF out of range\n", + quartz_load); + return ac; + } + + ret =3D i2c_smbus_write_byte_data(client, M41T80_REG_AC, ac); + if (ret < 0) { + dev_err(dev, "Can't set AC register\n"); + return ret; + } + + dev_info(dev, "quartz load set to %d fF (AC=3D0x%x)\n", quartz_load, ac); + return 0; +} + #ifdef CONFIG_PM_SLEEP static int m41t80_suspend(struct device *dev) { @@ -883,6 +941,7 @@ static int m41t80_probe(struct i2c_client *client) struct rtc_time tm; struct m41t80_data *m41t80_data =3D NULL; bool wakeup_source =3D false; + u32 quartz_load =3D M41T80_AC_DEFAULT; =20 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK | I2C_FUNC_SMBUS_BYTE_DATA)) { @@ -912,6 +971,14 @@ static int m41t80_probe(struct i2c_client *client) if (IS_ENABLED(CONFIG_OF)) { wakeup_source =3D of_property_read_bool(client->dev.of_node, "wakeup-source"); + + rc =3D of_property_read_u32(client->dev.of_node, + "quartz-load-femtofarads", + &quartz_load); + if (!rc) + m41t80_set_ac(m41t80_data, quartz_load); + else if (rc !=3D -EINVAL) + dev_err(&client->dev, "quartz-load-femtofarads property value is missin= g or invalid\n"); } =20 if (client->irq > 0) { --=20 2.25.1