Linux RTC
 help / color / mirror / Atom feed
From: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk>
To: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: a.zummo@towertech.it, rtc-linux@googlegroups.com
Subject: [rtc-linux] Re: [PATCH 1/2] RTC: s35390a: handle invalid RTC time
Date: Tue, 17 Jan 2017 09:24:17 +0100	[thread overview]
Message-ID: <1484641457.20968.6.camel@collabora.co.uk> (raw)
In-Reply-To: <20170116175018.z74inrcapwqqtbcz@piout.net>

On Mon, 2017-01-16 at 18:50 +0100, Alexandre Belloni wrote:
> Hi,
> 
> On 12/01/2017 at 11:43:37 +0100, Fabien Lahoudere wrote :
> > If RTC time have been altered by low voltage, we notify users
> > that RTC time is invalid by returning -EINVAL.
> > The RTC time needs to be set correctly to clear the invalid flag.
> > If the RTC is not set before restarting, the information will be lost.
> > 
> > Signed-off-by: Fabien Lahoudere <fabien.lahoudere@collabora.co.uk>
> > ---
> >  drivers/rtc/rtc-s35390a.c | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> > 
> > diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c
> > index 5dab466..ef4ada9 100644
> > --- a/drivers/rtc/rtc-s35390a.c
> > +++ b/drivers/rtc/rtc-s35390a.c
> > @@ -62,6 +62,7 @@ struct s35390a {
> >  	struct i2c_client *client[8];
> >  	struct rtc_device *rtc;
> >  	int twentyfourhour;
> > +	int isinvalid;
> >  };
> >  
> >  static int s35390a_set_reg(struct s35390a *s35390a, int reg, char *buf, int len)
> > @@ -135,6 +136,8 @@ static int s35390a_reset(struct s35390a *s35390a, char *status1)
> >  	 * The 24H bit is kept over reset, so set it already here.
> >  	 */
> >  initialize:
> > +	/* set the RTC time as invalid */
> > +	s35390a->isinvalid = 1;
> >  	*status1 = S35390A_FLAG_24H;
> >  	buf = S35390A_FLAG_RESET | S35390A_FLAG_24H;
> >  	ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1);
> > @@ -221,6 +224,8 @@ static int s35390a_set_datetime(struct i2c_client *client, struct rtc_time *tm)
> >  		buf[i] = bitrev8(buf[i]);
> >  
> >  	err = s35390a_set_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf));
> > +	if (err >= 0)
> > +		s35390a->isinvalid = 0;
> >  
> >  	return err;
> >  }
> > @@ -231,6 +236,9 @@ static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm)
> >  	char buf[7];
> >  	int i, err;
> >  
> > +	if (s35390a->isinvalid)
> > +		return -EINVAL;
> > +
> 
> That's fine but what happens if it became invalid between probe and
> s35390a_get_datetime()? (This is particularly relevant after patch 2/2.

This is not possible with our design. When the system is on, its power
supply replace the backup battery. (See p38 Figure 49).

If you prefer I can call s35390a_reset if s35390a->isinvalid is set to
0?

> 
> >  	err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf));
> >  	if (err < 0)
> >  		return err;
> > @@ -418,6 +426,7 @@ static int s35390a_probe(struct i2c_client *client,
> >  
> >  	s35390a->client[0] = client;
> >  	i2c_set_clientdata(client, s35390a);
> > +	s35390a->isinvalid = 0;
> >  
> >  	/* This chip uses multiple addresses, use dummy devices for them */
> >  	for (i = 1; i < 8; ++i) {
> > -- 
> > 1.8.3.1
> > 
> 


-- 
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
--- 
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  reply	other threads:[~2017-01-17  8:24 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-12 10:43 [rtc-linux] [PATCH 0/2] Improve low voltage or invalid time detection Fabien Lahoudere
2017-01-12 10:43 ` [rtc-linux] [PATCH 1/2] RTC: s35390a: handle invalid RTC time Fabien Lahoudere
2017-01-16 17:50   ` [rtc-linux] " Alexandre Belloni
2017-01-17  8:24     ` Fabien Lahoudere [this message]
2017-01-17 11:00       ` Alexandre Belloni
2017-06-26  9:51         ` Fabien Lahoudere
2017-06-29  7:56           ` Alexandre Belloni
2017-07-04  8:55             ` Fabien Lahoudere
2017-07-04 11:19               ` Alexandre Belloni
2017-01-12 10:43 ` [rtc-linux] [PATCH 2/2] RTC: s35390a: implement ioctls Fabien Lahoudere
2017-01-16 17:48   ` [rtc-linux] " 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=1484641457.20968.6.camel@collabora.co.uk \
    --to=fabien.lahoudere@collabora.co.uk \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=rtc-linux@googlegroups.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