hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/rtc/rtc-pm8xxx.c
....@@ -219,7 +219,6 @@
219219 {
220220 int rc, i;
221221 u8 value[NUM_8_BIT_RTC_REGS];
222
- unsigned int ctrl_reg;
223222 unsigned long secs, irq_flags;
224223 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
225224 const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
....@@ -231,6 +230,11 @@
231230 secs >>= 8;
232231 }
233232
233
+ rc = regmap_update_bits(rtc_dd->regmap, regs->alarm_ctrl,
234
+ regs->alarm_en, 0);
235
+ if (rc)
236
+ return rc;
237
+
234238 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
235239
236240 rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw, value,
....@@ -240,19 +244,11 @@
240244 goto rtc_rw_fail;
241245 }
242246
243
- rc = regmap_read(rtc_dd->regmap, regs->alarm_ctrl, &ctrl_reg);
244
- if (rc)
245
- goto rtc_rw_fail;
246
-
247
- if (alarm->enabled)
248
- ctrl_reg |= regs->alarm_en;
249
- else
250
- ctrl_reg &= ~regs->alarm_en;
251
-
252
- rc = regmap_write(rtc_dd->regmap, regs->alarm_ctrl, ctrl_reg);
253
- if (rc) {
254
- dev_err(dev, "Write to RTC alarm control register failed\n");
255
- goto rtc_rw_fail;
247
+ if (alarm->enabled) {
248
+ rc = regmap_update_bits(rtc_dd->regmap, regs->alarm_ctrl,
249
+ regs->alarm_en, regs->alarm_en);
250
+ if (rc)
251
+ goto rtc_rw_fail;
256252 }
257253
258254 dev_dbg(dev, "Alarm Set for h:m:s=%ptRt, y-m-d=%ptRdr\n",