| .. | .. |
|---|
| 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", |
|---|