All of lore.kernel.org
 help / color / mirror / Atom feed
From: Biju Das <biju.das.jz@bp.renesas.com>
To: Alessandro Zummo <a.zummo@towertech.it>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Biju Das <biju.das.jz@bp.renesas.com>,
	linux-rtc@vger.kernel.org,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Fabrizio Castro <fabrizio.castro.jz@renesas.com>,
	linux-renesas-soc@vger.kernel.org
Subject: [PATCH v4 07/11] rtc: isl1208: Add isl1208_set_xtoscb()
Date: Thu, 18 May 2023 12:36:39 +0100	[thread overview]
Message-ID: <20230518113643.420806-8-biju.das.jz@bp.renesas.com> (raw)
In-Reply-To: <20230518113643.420806-1-biju.das.jz@bp.renesas.com>

As per the HW manual, setting of XTOSCB bit as follws

If using an external clock signal, set the XTOSCB bit as 1 to
disable the crystal oscillator.

If using an external crystal, the XTOSCB bit needs to be set at 0
to enable the crystal oscillator.

Add isl1208_set_xtoscb() to set XTOSCB bit based on the clock-names
property. Fallback is enabling the internal crystal oscillator.

While at it, introduce a variable "sr" for reading status register
in probe() as it is reused for writing.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v4:
 * New patch.
---
 drivers/rtc/rtc-isl1208.c | 36 +++++++++++++++++++++++++++++++-----
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index 916e7d44c96f..5f91a3ca5920 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -6,6 +6,7 @@
  */
 
 #include <linux/bcd.h>
+#include <linux/clk.h>
 #include <linux/i2c.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
@@ -175,6 +176,16 @@ isl1208_i2c_validate_client(struct i2c_client *client)
 	return 0;
 }
 
+static int isl1208_set_xtoscb(struct i2c_client *client, int sr, bool int_osc_en)
+{
+	if (int_osc_en)
+		sr &= ~ISL1208_REG_SR_XTOSCB;
+	else
+		sr |= ISL1208_REG_SR_XTOSCB;
+
+	return i2c_smbus_write_byte_data(client, ISL1208_REG_SR, sr);
+}
+
 static int
 isl1208_i2c_get_sr(struct i2c_client *client)
 {
@@ -808,9 +819,13 @@ static int isl1208_setup_irq(struct i2c_client *client, int irq)
 static int
 isl1208_probe(struct i2c_client *client)
 {
-	int rc = 0;
 	struct isl1208_state *isl1208;
+	bool int_osc_en = true;
 	int evdet_irq = -1;
+	struct clk *clkin;
+	struct clk *xin;
+	int rc = 0;
+	int sr;
 
 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
 		return -ENODEV;
@@ -837,6 +852,13 @@ isl1208_probe(struct i2c_client *client)
 		isl1208->config = (struct isl1208_config *)id->driver_data;
 	}
 
+	xin = devm_clk_get(&client->dev, "xin");
+	if (IS_ERR(xin)) {
+		clkin = devm_clk_get(&client->dev, "clkin");
+		if (!IS_ERR(clkin))
+			int_osc_en = false;
+	}
+
 	isl1208->rtc = devm_rtc_allocate_device(&client->dev);
 	if (IS_ERR(isl1208->rtc))
 		return PTR_ERR(isl1208->rtc);
@@ -848,13 +870,17 @@ isl1208_probe(struct i2c_client *client)
 	isl1208->nvmem_config.size = isl1208->config->nvmem_length;
 	isl1208->nvmem_config.priv = isl1208;
 
-	rc = isl1208_i2c_get_sr(client);
-	if (rc < 0) {
+	sr = isl1208_i2c_get_sr(client);
+	if (sr < 0) {
 		dev_err(&client->dev, "reading status failed\n");
-		return rc;
+		return sr;
 	}
 
-	if (rc & ISL1208_REG_SR_RTCF)
+	rc = isl1208_set_xtoscb(client, sr, int_osc_en);
+	if (rc)
+		return rc;
+
+	if (sr & ISL1208_REG_SR_RTCF)
 		dev_warn(&client->dev, "rtc power failure detected, "
 			 "please set clock.\n");
 
-- 
2.25.1


  parent reply	other threads:[~2023-05-18 11:39 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-18 11:36 [PATCH v4 00/11] Add Renesas PMIC RAA215300 and built-in RTC support Biju Das
2023-05-18 11:36 ` [PATCH v4 01/11] i2c: Enhance i2c_new_ancillary_device API Biju Das
2023-05-18 11:36   ` Biju Das
2023-05-19 12:29   ` Geert Uytterhoeven
2023-05-19 12:29     ` Geert Uytterhoeven
2023-05-19 15:22     ` Biju Das
2023-05-19 15:22       ` Biju Das
2023-05-18 11:36 ` [PATCH v4 02/11] dt-bindings: rtc: isl1208: Convert to json-schema Biju Das
2023-05-18 11:36 ` [PATCH v4 03/11] dt-bindings: rtc: isil,isl1208: Document clock and clock-names properties Biju Das
2023-05-18 19:17   ` Conor Dooley
2023-05-19 12:35   ` Geert Uytterhoeven
2023-05-19 16:02     ` Biju Das
2023-05-18 11:36 ` [PATCH v4 04/11] rtc: isl1208: Drop name variable Biju Das
2023-05-19 12:37   ` Geert Uytterhoeven
2023-05-18 11:36 ` [PATCH v4 05/11] rtc: isl1208: Make similar I2C and DT-based matching table Biju Das
2023-05-19 12:38   ` Geert Uytterhoeven
2023-05-19 16:08     ` Biju Das
2023-05-19 16:10       ` Biju Das
2023-05-19 19:43       ` Geert Uytterhoeven
2023-05-22  6:48         ` Biju Das
2023-05-18 11:36 ` [PATCH v4 06/11] rtc: isl1208: Drop enum isl1208_id and split isl1208_configs[] Biju Das
2023-05-19 12:40   ` Geert Uytterhoeven
2023-05-18 11:36 ` Biju Das [this message]
2023-05-19 12:48   ` [PATCH v4 07/11] rtc: isl1208: Add isl1208_set_xtoscb() Geert Uytterhoeven
2023-05-19 16:24     ` Biju Das
2023-05-18 11:36 ` [PATCH v4 08/11] rtc: isl1208: Add support for the built-in RTC on the PMIC RAA215300 Biju Das
2023-05-19 12:54   ` Geert Uytterhoeven
2023-05-19 16:47     ` Biju Das
2023-05-18 11:36 ` [PATCH v4 09/11] regulator: dt-bindings: Add Renesas RAA215300 PMIC bindings Biju Das
2023-05-18 19:13   ` Conor Dooley
2023-05-19  6:53     ` Biju Das
2023-05-19 14:10       ` Conor Dooley
2023-05-19 14:39         ` Biju Das
2023-05-19 14:49           ` Geert Uytterhoeven
2023-05-19 14:52             ` Geert Uytterhoeven
2023-05-19 15:20             ` Conor Dooley
2023-05-19 14:58         ` Mark Brown
2023-05-19 12:58   ` Geert Uytterhoeven
2023-05-19 16:49     ` Biju Das
2023-05-18 11:36 ` [PATCH v4 10/11] regulator: Add Renesas PMIC RAA215300 driver Biju Das
2023-05-19 13:02   ` Geert Uytterhoeven
2023-05-19 16:50     ` Biju Das
2023-05-18 11:36 ` [PATCH v4 11/11] arm64: dts: renesas: rzg2l-smarc-som: Enable PMIC and built-in RTC Biju Das

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=20230518113643.420806-8-biju.das.jz@bp.renesas.com \
    --to=biju.das.jz@bp.renesas.com \
    --cc=a.zummo@towertech.it \
    --cc=alexandre.belloni@bootlin.com \
    --cc=fabrizio.castro.jz@renesas.com \
    --cc=geert+renesas@glider.be \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-rtc@vger.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.