linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Giulio Benetti <giulio.benetti@micronovasrl.com>
To: a.zummo@towertech.it
Cc: alexandre.belloni@bootlin.com, robh+dt@kernel.org,
	mark.rutland@arm.com, linux-rtc@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Giulio Benetti <giulio.benetti@micronovasrl.com>
Subject: [PATCH 3/4] rtc: ds1307: add calibration of_ for mt41txx chips.
Date: Tue,  8 May 2018 16:56:10 +0200	[thread overview]
Message-ID: <20180508145611.49072-3-giulio.benetti@micronovasrl.com> (raw)
In-Reply-To: <20180508145611.49072-1-giulio.benetti@micronovasrl.com>

m41txx chips can hold a calibration value to get really near to real
tick value.

Add calibration property(ranging between (-31) and 31), so on every probe
calibration value will be written to rtc.
This is because ic could loose supply due to low battery.

Signed-off-by: Giulio Benetti <giulio.benetti@micronovasrl.com>
---
 .../devicetree/bindings/rtc/rtc-ds1307.txt    |  2 ++
 drivers/rtc/rtc-ds1307.c                      | 33 +++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/Documentation/devicetree/bindings/rtc/rtc-ds1307.txt b/Documentation/devicetree/bindings/rtc/rtc-ds1307.txt
index ce6469c1a516..d3d70a5495c5 100644
--- a/Documentation/devicetree/bindings/rtc/rtc-ds1307.txt
+++ b/Documentation/devicetree/bindings/rtc/rtc-ds1307.txt
@@ -34,6 +34,8 @@ Optional properties:
 - trickle-diode-disable : ds1339, ds1340 and ds 1388 only
 	Do not use internal trickle charger diode
 	Should be given if internal trickle charger diode should be disabled
+- calibration: m41t0, m41t00, m41t11 only
+	Set calibration value to correct external bias, ranging between (-31) and 31.
 
 Example:
 	rtc1: ds1339@68 {
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 0ab0c166da83..9cda52589c0f 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -114,6 +114,12 @@ enum ds_type {
 #	define RX8025_BIT_VDET		0x40
 #	define RX8025_BIT_XST		0x20
 
+#define M41TXX_REG_CONTROL	0x07
+#	define M41TXX_BIT_OUT		0x80
+#	define M41TXX_BIT_FT		0x40
+#	define M41TXX_BIT_CALIB_SIGN	0x20
+#	define M41TXX_M_CALIBRATION	0x1f
+
 struct ds1307 {
 	enum ds_type		type;
 	unsigned long		flags;
@@ -1397,6 +1403,7 @@ static int ds1307_probe(struct i2c_client *client,
 	unsigned char		regs[8];
 	struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);
 	u8			trickle_charger_setup = 0;
+	s32			calib;
 
 	ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);
 	if (!ds1307)
@@ -1460,6 +1467,32 @@ static int ds1307_probe(struct i2c_client *client,
 	if (chip->alarm && of_property_read_bool(client->dev.of_node,
 						 "wakeup-source"))
 		ds1307_can_wakeup_device = true;
+
+	/* retrieve calibration value if provided */
+	if (!of_property_read_s32(client->dev.of_node, "calibration",
+				 &calib)) {
+		switch (ds1307->type) {
+		case m41t0:
+		case m41t00:
+		case m41t11:
+		{
+			/*
+			 * Set calibration value every power-on since rtc
+			 * could have shut off(low battery)
+			 */
+			u8 out_byte = abs(calib) & M41TXX_M_CALIBRATION;
+
+			if (calib >= 0)
+				out_byte |= M41TXX_BIT_CALIB_SIGN;
+
+			regmap_write(ds1307->regmap, M41TXX_REG_CONTROL,
+					out_byte);
+		}
+			break;
+		default:
+			break;
+		}
+	}
 #endif
 
 	switch (ds1307->type) {
-- 
2.17.0

  parent reply	other threads:[~2018-05-08 14:56 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-08 14:56 [PATCH 1/4] rtc: ds1307: fix data pointer to m41t0 Giulio Benetti
2018-05-08 14:56 ` [PATCH 2/4] rtc: ds1307: support m41t11 variant Giulio Benetti
2018-05-08 14:56 ` Giulio Benetti [this message]
2018-05-08 17:40   ` [PATCH 3/4] rtc: ds1307: add calibration of_ for mt41txx chips Rob Herring
2018-05-09 18:33     ` Giulio Benetti
2018-05-08 19:19   ` Alexandre Belloni
2018-05-09 18:31     ` Giulio Benetti
2018-05-08 14:56 ` [PATCH 4/4] rtc: ds1307: add frequency-test property to check calibration on m41txx Giulio Benetti
2018-05-08 17:44   ` Rob Herring
2018-05-09 18:32     ` Giulio Benetti

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=20180508145611.49072-3-giulio.benetti@micronovasrl.com \
    --to=giulio.benetti@micronovasrl.com \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).