Add support for Samsung's S2MPS16 PMIC RTC, which has pretty much identical functionality to the existing S2MPS15 support, with the difference being the ST2 register. Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@xxxxxxxxx> --- drivers/rtc/rtc-s5m.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c index a7220b4d0..910248731 100644 --- a/drivers/rtc/rtc-s5m.c +++ b/drivers/rtc/rtc-s5m.c @@ -18,6 +18,7 @@ #include <linux/mfd/samsung/irq.h> #include <linux/mfd/samsung/rtc.h> #include <linux/mfd/samsung/s2mps14.h> +#include <linux/mfd/samsung/s2mps16.h> /* * Maximum number of retries for checking changes in UDR field @@ -254,6 +255,11 @@ static int s5m_check_pending_alarm_interrupt(struct s5m_rtc_info *info, ret = regmap_read(info->regmap, S5M_RTC_STATUS, &val); val &= S5M_ALARM0_STATUS; break; + case S2MPS16X: + ret = regmap_read(info->s5m87xx->regmap_pmic, S2MPS16_REG_ST2, + &val); + val &= S2MPS_ALARM0_STATUS; + break; case S2MPG10: case S2MPS15X: case S2MPS14X: @@ -303,6 +309,7 @@ static int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info) udr_mask |= S5M_RTC_TIME_EN_MASK; break; case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -354,6 +361,7 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -378,6 +386,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -416,6 +425,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -455,6 +465,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -494,6 +505,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -532,6 +544,7 @@ static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) switch (info->device_type) { case S5M8767X: case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -613,6 +626,7 @@ static int s5m8767_rtc_init_reg(struct s5m_rtc_info *info) break; case S2MPG10: + case S2MPS16X: case S2MPS15X: case S2MPS14X: case S2MPS13X: @@ -680,6 +694,7 @@ static int s5m_rtc_probe(struct platform_device *pdev) struct i2c_client *i2c; switch (device_type) { + case S2MPS16X: case S2MPS15X: regmap_cfg = &s2mps14_rtc_regmap_config; info->regs = &s2mps15_rtc_regs; @@ -817,6 +832,7 @@ static const struct platform_device_id s5m_rtc_id[] = { { "s2mps13-rtc", S2MPS13X }, { "s2mps14-rtc", S2MPS14X }, { "s2mps15-rtc", S2MPS15X }, + { "s2mps16-rtc", S2MPS16X }, { }, }; MODULE_DEVICE_TABLE(platform, s5m_rtc_id); -- 2.43.0