Commit b1248da0 authored by André Draszik's avatar André Draszik Committed by Alexandre Belloni
Browse files

rtc: s5m: replace open-coded read/modify/write registers with regmap helpers



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: default avatarAndré Draszik <andre.draszik@linaro.org>
Link: https://lore.kernel.org/r/20250409-s2mpg10-v4-31-d66d5f39b6bf@linaro.org


Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent f5adb1fa
Loading
Loading
Loading
Loading
+7 −21
Original line number Diff line number Diff line
@@ -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);