blob: 375bd6e6b7217567110abb9bbd6a4036670e2ac2 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From c91a8597734d13ebb5ac7393fa6f100d70f15664 Mon Sep 17 00:00:00 2001
2From: Phil Howard <phil@gadgetoid.com>
3Date: Fri, 29 Mar 2019 10:53:14 +0000
4Subject: [PATCH] rtc: rv3028: Add backup switchover mode support
5
6Signed-off-by: Phil Howard <phil@pimoroni.com>
7---
8 drivers/rtc/rtc-rv3028.c | 17 +++++++++++++++++
9 1 file changed, 17 insertions(+)
10
11--- a/drivers/rtc/rtc-rv3028.c
12+++ b/drivers/rtc/rtc-rv3028.c
13@@ -73,6 +73,7 @@
14
15 #define RV3028_BACKUP_TCE BIT(5)
16 #define RV3028_BACKUP_TCR_MASK GENMASK(1,0)
17+#define RV3028_BACKUP_BSM_MASK 0x0C
18
19 #define OFFSET_STEP_PPT 953674
20
21@@ -600,6 +601,7 @@ static int rv3028_probe(struct i2c_clien
22 struct rv3028_data *rv3028;
23 int ret, status;
24 u32 ohms;
25+ u8 bsm;
26 struct nvmem_config nvmem_cfg = {
27 .name = "rv3028_nvram",
28 .word_size = 1,
29@@ -671,6 +673,21 @@ static int rv3028_probe(struct i2c_clien
30 if (ret)
31 return ret;
32
33+ /* setup backup switchover mode */
34+ if (!device_property_read_u8(&client->dev, "backup-switchover-mode",
35+ &bsm)) {
36+ if (bsm <= 3) {
37+ ret = regmap_update_bits(rv3028->regmap, RV3028_BACKUP,
38+ RV3028_BACKUP_BSM_MASK,
39+ (bsm & 0x03) << 2);
40+
41+ if (ret)
42+ return ret;
43+ } else {
44+ dev_warn(&client->dev, "invalid backup switchover mode value\n");
45+ }
46+ }
47+
48 /* setup trickle charger */
49 if (!device_property_read_u32(&client->dev, "trickle-resistor-ohms",
50 &ohms)) {