[PATCH v1 3/3] rtc: rs5c372: support eco mode on R2223x
From: Heiko Schocher
Date: Mon Aug 24 2026 - 07:05:50 EST
The R2223x can run in an eco mode that lowers its current consumption
from the backup supply. Enable it when ricoh,eco-mode property is
set in the device tree.
Signed-off-by: Heiko Schocher <hs@xxxxxxxxxxxx>
---
drivers/rtc/rtc-rs5c372.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/drivers/rtc/rtc-rs5c372.c b/drivers/rtc/rtc-rs5c372.c
index 30e272d65021..41d391bf07f7 100644
--- a/drivers/rtc/rtc-rs5c372.c
+++ b/drivers/rtc/rtc-rs5c372.c
@@ -52,6 +52,7 @@
#define RS5C_REG_CTRL2 15
# define RS5C372_CTRL2_24 (1 << 5)
# define RS5C_CTRL2_XSTP (1 << 4) /* only if !R2x2x */
+# define R2223x_CTRL2_ECO (1 << 7) /* only if R2223x */
# define R2x2x_CTRL2_VDET (1 << 6) /* only if R2x2x */
# define R2x2x_CTRL2_XSTP (1 << 5) /* only if R2x2x */
# define R2x2x_CTRL2_PON (1 << 4) /* only if R2x2x */
@@ -802,6 +803,24 @@ static int rs5c_oscillator_setup(struct rs5c372 *rs5c372)
return 0;
}
+static int rs5c372_set_eco_mode(struct rs5c372 *rs5c372, bool eco)
+{
+ struct i2c_client *client = rs5c372->client;
+ int ctrl2;
+
+ ctrl2 = i2c_smbus_read_byte_data(client, RS5C_ADDR(RS5C_REG_CTRL2));
+ if (ctrl2 < 0)
+ return ctrl2;
+
+ if (eco)
+ ctrl2 |= R2223x_CTRL2_ECO;
+ else
+ ctrl2 &= ~R2223x_CTRL2_ECO;
+
+ return i2c_smbus_write_byte_data(client, RS5C_ADDR(RS5C_REG_CTRL2),
+ ctrl2);
+}
+
static int rs5c372_probe(struct i2c_client *client)
{
int err = 0;
@@ -898,6 +917,13 @@ static int rs5c372_probe(struct i2c_client *client)
rs5c372->time24 ? "24hr" : "am/pm"
);
+ if (rs5c372->type == rtc_r2223x &&
+ device_property_read_bool(&client->dev, "ricoh,eco-mode")) {
+ err = rs5c372_set_eco_mode(rs5c372, true);
+ if (err < 0)
+ return err;
+ }
+
/* REVISIT use client->irq to register alarm irq ... */
rs5c372->rtc = devm_rtc_device_register(&client->dev,
rs5c372_driver.driver.name,
--
2.55.0