On 14/09/2025 15:42:26+0300, Ivaylo Ivanov wrote: > 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> Acked-by: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> > --- > 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 > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com