]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rtc: s5m: replace open-coded read/modify/write registers with regmap helpers
authorAndré Draszik <andre.draszik@linaro.org>
Wed, 9 Apr 2025 20:37:52 +0000 (21:37 +0100)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 23 Jun 2025 21:58:40 +0000 (23:58 +0200)
Instead of the open-coded read/modify/write sequence, we can simply use
the regmap helpers regmap_set_bits() and regmap_update_bits()
respectively.

This makes the code easier to read, and avoids extra work in case the
underlying bus supports updating bits via
struct regmap_bus::reg_update_bits() directly (which is the case for
S2MPG10 on gs101 where this driver communicates via ACPM).

Signed-off-by: André Draszik <andre.draszik@linaro.org>
Link: https://lore.kernel.org/r/20250409-s2mpg10-v4-31-d66d5f39b6bf@linaro.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-s5m.c

index 27115523b8c25794a9f3ac8e734bb1ed998e9518..a7220b4d0e8dd35786b060e2a4106e2a39fe743f 100644 (file)
@@ -279,17 +279,9 @@ static int s5m_check_pending_alarm_interrupt(struct s5m_rtc_info *info,
 static int s5m8767_rtc_set_time_reg(struct s5m_rtc_info *info)
 {
        int ret;
-       unsigned int data;
-
-       ret = regmap_read(info->regmap, info->regs->udr_update, &data);
-       if (ret < 0) {
-               dev_err(info->dev, "failed to read update reg(%d)\n", ret);
-               return ret;
-       }
-
-       data |= info->regs->write_time_udr_mask;
 
-       ret = regmap_write(info->regmap, info->regs->udr_update, data);
+       ret = regmap_set_bits(info->regmap, info->regs->udr_update,
+                             info->regs->write_time_udr_mask);
        if (ret < 0) {
                dev_err(info->dev, "failed to write update reg(%d)\n", ret);
                return ret;
@@ -303,19 +295,12 @@ static int s5m8767_rtc_set_time_reg(struct s5m_rtc_info *info)
 static int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info)
 {
        int ret;
-       unsigned int data;
-
-       ret = regmap_read(info->regmap, info->regs->udr_update, &data);
-       if (ret < 0) {
-               dev_err(info->dev, "%s: fail to read update reg(%d)\n",
-                       __func__, ret);
-               return ret;
-       }
+       unsigned int udr_mask;
 
-       data |= info->regs->write_alarm_udr_mask;
+       udr_mask = info->regs->write_alarm_udr_mask;
        switch (info->device_type) {
        case S5M8767X:
-               data &= ~S5M_RTC_TIME_EN_MASK;
+               udr_mask |= S5M_RTC_TIME_EN_MASK;
                break;
        case S2MPG10:
        case S2MPS15X:
@@ -327,7 +312,8 @@ static int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info)
                return -EINVAL;
        }
 
-       ret = regmap_write(info->regmap, info->regs->udr_update, data);
+       ret = regmap_update_bits(info->regmap, info->regs->udr_update,
+                                udr_mask, info->regs->write_alarm_udr_mask);
        if (ret < 0) {
                dev_err(info->dev, "%s: fail to write update reg(%d)\n",
                        __func__, ret);