All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
To: Alessandro Zummo <a.zummo@towertech.it>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	devicetree@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	linux-rtc@vger.kernel.org,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v3 6/8] rtc: isl12022: trigger battery level detection during probe
Date: Thu, 15 Jun 2023 12:58:24 +0200	[thread overview]
Message-ID: <20230615105826.411953-7-linux@rasmusvillemoes.dk> (raw)
In-Reply-To: <20230615105826.411953-1-linux@rasmusvillemoes.dk>

Since the meaning of the SR_LBAT85 and SR_LBAT75 bits are different in
battery backup mode, they may very well be set after power on, and
stay set for up to a minute (i.e. until the battery detection in VDD
mode happens when the seconds counter hits 59). This would mean that
userspace doing a ioctl(RTC_VL_READ) early on could get a false
positive.

The battery level detection can also be triggered by explicitly
writing a 1 to the TSE bit in the BETA register. Do that once during
boot. Empirically, this does not immediately update the bits in
the status register (i.e., an immediate read of SR after this write
can still show stale values), but the update is done after a few
milliseconds, so certainly before the RTC device gets registered and
userspace has a chance of doing the ioctl() on this device.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 drivers/rtc/rtc-isl12022.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c
index a48456abdcb9..916879b0388c 100644
--- a/drivers/rtc/rtc-isl12022.c
+++ b/drivers/rtc/rtc-isl12022.c
@@ -272,6 +272,16 @@ static void isl12022_set_trip_levels(struct device *dev)
 	ret = regmap_update_bits(regmap, ISL12022_REG_PWR_VBAT, mask, val);
 	if (ret)
 		dev_warn(dev, "unable to set battery alarm levels: %d\n", ret);
+
+	/*
+	 * Force a write of the TSE bit in the BETA register, in order
+	 * to trigger an update of the LBAT75 and LBAT85 bits in the
+	 * status register. In battery backup mode, those bits have
+	 * another meaning, so without this, they may contain stale
+	 * values for up to a minute after power-on.
+	 */
+	regmap_write_bits(regmap, ISL12022_REG_BETA,
+			  ISL12022_BETA_TSE, ISL12022_BETA_TSE);
 }
 
 static int isl12022_probe(struct i2c_client *client)
-- 
2.37.2


  parent reply	other threads:[~2023-06-15 10:59 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-12 11:30 [PATCH 0/8] rtc: isl12022: battery backup voltage and clock support Rasmus Villemoes
2023-06-12 11:30 ` [PATCH 1/8] rtc: isl12022: remove wrong warning for low battery level Rasmus Villemoes
2023-06-12 11:30 ` [PATCH 2/8] dt-bindings: rtc: Move isil,isl12022 from trivial-rtc.yaml into own schema file Rasmus Villemoes
2023-06-12 12:26   ` Rob Herring
2023-06-12 12:36     ` Rasmus Villemoes
2023-06-12 13:54       ` Alexandre Belloni
2023-06-12 14:20       ` Rob Herring
2023-06-13  8:13         ` Rasmus Villemoes
2023-06-12 11:30 ` [PATCH 3/8] dt-bindings: rtc: isl12022: add bindings for battery alarm trip levels Rasmus Villemoes
2023-06-12 11:30 ` [PATCH 4/8] rtc: isl12022: add support for trip level DT bindings Rasmus Villemoes
2023-06-12 15:44   ` Andy Shevchenko
2023-06-12 18:10   ` kernel test robot
2023-06-12 18:58   ` kernel test robot
2023-06-12 11:30 ` [PATCH 5/8] rtc: isl12022: implement RTC_VL_READ and RTC_VL_CLR ioctls Rasmus Villemoes
2023-06-12 14:07   ` Alexandre Belloni
2023-06-13  7:27     ` Rasmus Villemoes
2023-06-12 15:48   ` Andy Shevchenko
2023-06-12 16:10     ` Alexandre Belloni
2023-06-13  7:53       ` Rasmus Villemoes
2023-06-13  9:00         ` Alexandre Belloni
2023-06-12 11:30 ` [PATCH 6/8] rtc: isl12022: trigger battery level detection during probe Rasmus Villemoes
2023-06-12 12:30   ` Rasmus Villemoes
2023-06-12 14:17     ` Alexandre Belloni
2023-06-13  7:51       ` Rasmus Villemoes
2023-06-12 14:15   ` Alexandre Belloni
2023-06-13  7:44     ` Rasmus Villemoes
2023-06-13  8:58       ` Alexandre Belloni
2023-06-12 11:30 ` [PATCH 7/8] dt-bindings: rtc: isl12022: add #clock-cells property Rasmus Villemoes
2023-06-13  7:41   ` Krzysztof Kozlowski
2023-06-12 11:30 ` [PATCH 8/8] rtc: isl12022: implement support for the #clock-cells DT property Rasmus Villemoes
2023-06-13 13:00 ` [PATCH v2 0/8] rtc: isl12022: battery backup voltage and clock support Rasmus Villemoes
2023-06-13 13:00   ` [PATCH v2 1/8] rtc: isl12022: remove wrong warning for low battery level Rasmus Villemoes
2023-06-13 13:00   ` [PATCH v2 2/8] dt-bindings: rtc: Move isil,isl12022 from trivial-rtc.yaml into own schema file Rasmus Villemoes
2023-06-13 19:06     ` Krzysztof Kozlowski
2023-06-13 13:00   ` [PATCH v2 3/8] dt-bindings: rtc: isl12022: add bindings for battery alarm trip levels Rasmus Villemoes
2023-06-13 19:09     ` Krzysztof Kozlowski
2023-06-13 19:51       ` Rasmus Villemoes
2023-06-13 21:37         ` Krzysztof Kozlowski
2023-06-13 13:00   ` [PATCH v2 4/8] rtc: isl12022: add support for trip level DT bindings Rasmus Villemoes
2023-06-13 13:00   ` [PATCH v2 5/8] rtc: isl12022: implement RTC_VL_READ ioctl Rasmus Villemoes
2023-06-13 15:20     ` Andy Shevchenko
2023-06-13 21:26       ` Alexandre Belloni
2023-06-14 12:16         ` Andy Shevchenko
2023-06-14 13:50           ` Alexandre Belloni
2023-06-14 15:13             ` Andy Shevchenko
2023-06-15 10:53               ` Rasmus Villemoes
2023-06-15 10:58                 ` Andy Shevchenko
2023-06-13 13:00   ` [PATCH v2 6/8] rtc: isl12022: trigger battery level detection during probe Rasmus Villemoes
2023-06-13 13:00   ` [PATCH v2 7/8] dt-bindings: rtc: isl12022: add #clock-cells property Rasmus Villemoes
2023-06-13 19:10     ` Krzysztof Kozlowski
2023-06-13 20:25       ` Rasmus Villemoes
2023-06-13 21:38         ` Krzysztof Kozlowski
2023-06-13 13:00   ` [PATCH v2 8/8] rtc: isl12022: implement support for the #clock-cells DT property Rasmus Villemoes
2023-06-13 15:25     ` Andy Shevchenko
2023-06-14 10:51       ` Rasmus Villemoes
2023-06-14 12:13         ` Andy Shevchenko
2023-06-13 19:10     ` kernel test robot
2023-06-14  5:27     ` kernel test robot
2023-06-13 15:26   ` [PATCH v2 0/8] rtc: isl12022: battery backup voltage and clock support Andy Shevchenko
2023-06-13 19:06   ` Krzysztof Kozlowski
2023-06-15 11:03     ` Rasmus Villemoes
2023-06-15 10:58 ` [PATCH v3 " Rasmus Villemoes
2023-06-15 10:58   ` [PATCH v3 1/8] rtc: isl12022: remove wrong warning for low battery level Rasmus Villemoes
2023-06-15 10:58   ` [PATCH v3 2/8] dt-bindings: rtc: Move isil,isl12022 from trivial-rtc.yaml into own schema file Rasmus Villemoes
2023-06-15 10:58   ` [PATCH v3 3/8] dt-bindings: rtc: isl12022: add bindings for battery alarm trip levels Rasmus Villemoes
2023-06-17  8:12     ` Krzysztof Kozlowski
2023-06-15 10:58   ` [PATCH v3 4/8] rtc: isl12022: add support for trip level DT binding Rasmus Villemoes
2023-06-15 11:11     ` Andy Shevchenko
2023-06-19  7:27       ` Rasmus Villemoes
2023-06-15 10:58   ` [PATCH v3 5/8] rtc: isl12022: implement RTC_VL_READ ioctl Rasmus Villemoes
2023-06-15 10:58   ` Rasmus Villemoes [this message]
2023-06-15 10:58   ` [PATCH v3 7/8] dt-bindings: rtc: isl12022: add #clock-cells property Rasmus Villemoes
2023-06-17  8:13     ` Krzysztof Kozlowski
2023-06-15 10:58   ` [PATCH v3 8/8] rtc: isl12022: implement support for the #clock-cells DT property Rasmus Villemoes
2023-07-28 14:31   ` [PATCH v3 0/8] rtc: isl12022: battery backup voltage and clock support Rasmus Villemoes
2023-08-03  6:45     ` Rasmus Villemoes
2023-08-09 12:28       ` Rasmus Villemoes
2023-08-15 23:28   ` Alexandre Belloni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230615105826.411953-7-linux@rasmusvillemoes.dk \
    --to=linux@rasmusvillemoes.dk \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.