.. | .. |
---|
219 | 219 | { |
---|
220 | 220 | int rc, i; |
---|
221 | 221 | u8 value[NUM_8_BIT_RTC_REGS]; |
---|
222 | | - unsigned int ctrl_reg; |
---|
223 | 222 | unsigned long secs, irq_flags; |
---|
224 | 223 | struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev); |
---|
225 | 224 | const struct pm8xxx_rtc_regs *regs = rtc_dd->regs; |
---|
.. | .. |
---|
231 | 230 | secs >>= 8; |
---|
232 | 231 | } |
---|
233 | 232 | |
---|
| 233 | + rc = regmap_update_bits(rtc_dd->regmap, regs->alarm_ctrl, |
---|
| 234 | + regs->alarm_en, 0); |
---|
| 235 | + if (rc) |
---|
| 236 | + return rc; |
---|
| 237 | + |
---|
234 | 238 | spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags); |
---|
235 | 239 | |
---|
236 | 240 | rc = regmap_bulk_write(rtc_dd->regmap, regs->alarm_rw, value, |
---|
.. | .. |
---|
240 | 244 | goto rtc_rw_fail; |
---|
241 | 245 | } |
---|
242 | 246 | |
---|
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; |
---|
256 | 252 | } |
---|
257 | 253 | |
---|
258 | 254 | dev_dbg(dev, "Alarm Set for h:m:s=%ptRt, y-m-d=%ptRdr\n", |
---|