summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorBiju Das <biju.das.jz@bp.renesas.com>2023-06-23 15:09:48 +0100
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2023-06-26 00:58:21 +0200
commitfdd63f65ac25d0851dade4c7ba94a7a882b8d9c2 (patch)
tree2d467b7fcc852c0cfe2552a0ace106fc2c24db2a /drivers
parent262f72b4656e182eefaab91ab24a7575dda5524f (diff)
rtc: isl1208: Add support for the built-in RTC on the PMIC RAA215300
The built-in RTC found on PMIC RAA215300 is the same as ISL1208. However, the external oscillator bit is inverted on PMIC version 0x11. The PMIC driver detects PMIC version and instantiates the RTC device based on i2c_device_id. Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Link: https://lore.kernel.org/r/20230623140948.384762-11-biju.das.jz@bp.renesas.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/rtc/rtc-isl1208.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index e9ec5675e27c..b0712b4e3648 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -74,6 +74,7 @@ struct isl1208_config {
unsigned int nvmem_length;
unsigned has_tamper:1;
unsigned has_timestamp:1;
+ unsigned has_inverted_osc_bit:1;
};
static const struct isl1208_config config_isl1208 = {
@@ -100,11 +101,19 @@ static const struct isl1208_config config_isl1219 = {
.has_timestamp = true
};
+static const struct isl1208_config config_raa215300_a0 = {
+ .nvmem_length = 2,
+ .has_tamper = false,
+ .has_timestamp = false,
+ .has_inverted_osc_bit = true
+};
+
static const struct i2c_device_id isl1208_id[] = {
{ "isl1208", .driver_data = (kernel_ulong_t)&config_isl1208 },
{ "isl1209", .driver_data = (kernel_ulong_t)&config_isl1209 },
{ "isl1218", .driver_data = (kernel_ulong_t)&config_isl1218 },
{ "isl1219", .driver_data = (kernel_ulong_t)&config_isl1219 },
+ { "raa215300_a0", .driver_data = (kernel_ulong_t)&config_raa215300_a0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, isl1208_id);
@@ -895,6 +904,9 @@ isl1208_probe(struct i2c_client *client)
return sr;
}
+ if (isl1208->config->has_inverted_osc_bit)
+ xtosb_val = !xtosb_val;
+
rc = isl1208_set_xtoscb(client, sr, xtosb_val);
if (rc)
return rc;