public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Belloni <alexandre.belloni@bootlin.com>
To: "A. Sverdlin" <alexander.sverdlin@siemens.com>
Cc: linux-rtc@vger.kernel.org,
	Lukas Stockmann <lukas.stockmann@siemens.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rtc: pcf85063: do a SW reset after rtc power fail
Date: Thu, 29 Feb 2024 23:08:02 +0100	[thread overview]
Message-ID: <2024022922080217cbe165@mail.local> (raw)
In-Reply-To: <20240227131436.3342807-1-alexander.sverdlin@siemens.com>

On 27/02/2024 14:14:32+0100, A. Sverdlin wrote:
> From: Lukas Stockmann <lukas.stockmann@siemens.com>
> 
> From PCF85063A datasheet, section "Software reset":
> 
> "There is a low probability that some devices will have corruption of the
> registers after the automatic power-on reset if the device is powered up
> with a residual VDD level. It is required that the VDD starts at zero volts
> at power up or upon power cycling to ensure that there is no corruption of
> the registers. If this is not possible, a reset must be initiated after
> power-up (i.e. when power is stable) with the software reset command"
> 
> Trigger SW reset if a power loss is detected.
> 
> Link: https://www.nxp.com/docs/en/data-sheet/PCF85063A.pdf
> Signed-off-by: Lukas Stockmann <lukas.stockmann@siemens.com>
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
> ---
>  drivers/rtc/rtc-pcf85063.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c
> index fdbc07f14036..edfd75d18e19 100644
> --- a/drivers/rtc/rtc-pcf85063.c
> +++ b/drivers/rtc/rtc-pcf85063.c
> @@ -35,6 +35,7 @@
>  #define PCF85063_REG_CTRL1_CAP_SEL	BIT(0)
>  #define PCF85063_REG_CTRL1_STOP		BIT(5)
>  #define PCF85063_REG_CTRL1_EXT_TEST	BIT(7)
> +#define PCF85063_REG_CTRL1_SWR		0x58
>  
>  #define PCF85063_REG_CTRL2		0x01
>  #define PCF85063_CTRL2_AF		BIT(6)
> @@ -580,7 +581,7 @@ static int pcf85063_probe(struct i2c_client *client)
>  
>  	i2c_set_clientdata(client, pcf85063);
>  
> -	err = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL1, &tmp);
> +	err = regmap_read(pcf85063->regmap, PCF85063_REG_SC, &tmp);
>  	if (err) {
>  		dev_err(&client->dev, "RTC chip is not present\n");
>  		return err;
> @@ -590,6 +591,22 @@ static int pcf85063_probe(struct i2c_client *client)
>  	if (IS_ERR(pcf85063->rtc))
>  		return PTR_ERR(pcf85063->rtc);
>  
> +	/*
> +	 * If a Power loss is detected, SW reset the device.
> +	 * From PCF85063A datasheet:
> +	 * There is a low probability that some devices will have corruption
> +	 * of the registers after the automatic power-on reset...
> +	 */
> +	if (tmp & PCF85063_REG_SC_OS) {
> +		dev_warn(&client->dev,
> +			 "Power loss detected, send a SW reset to the device\n");
> +		err = regmap_write(pcf85063->regmap, PCF85063_REG_CTRL1,
> +				PCF85063_REG_CTRL1_SWR);
> +		if (err < 0)
> +			dev_err(&client->dev,
> +				"SW reset failed, trying to continue\n");
> +	}

Doing this in probe is putting a band-aid on a wooden leg as you are not
guaranteed you will have a probe to catch this case. This should be
rather done in pcf85063_rtc_set_time but it comes with its own set of
issues because this probably requires to reconfigure most of the chip
which is conveniently done in probe. And then it will introduce varance
in the time taken to set_time which is generally bad if you care about
sub second precision.


-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2024-02-29 22:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27 13:14 [PATCH] rtc: pcf85063: do a SW reset after rtc power fail A. Sverdlin
2024-02-29 22:08 ` Alexandre Belloni [this message]
2024-03-01 11:10   ` Sverdlin, Alexander
2024-03-15 10:03     ` Sverdlin, Alexander
2025-01-07 10:06     ` Sverdlin, Alexander

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=2024022922080217cbe165@mail.local \
    --to=alexandre.belloni@bootlin.com \
    --cc=alexander.sverdlin@siemens.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=lukas.stockmann@siemens.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox