diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index 522f7eef3b4a..0cf4836b81b1 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -579,28 +579,27 @@ static irqreturn_t rx8130_irq(int irq, void *dev_id) u8 ctl[3]; int ret; - rtc_lock(ds1307->rtc); + guard(rtc_ops)(ds1307->rtc); /* Read control registers. */ ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, sizeof(ctl)); if (ret < 0) - goto out; + return IRQ_HANDLED; + if (!(ctl[1] & RX8130_REG_FLAG_AF)) - goto out; + return IRQ_HANDLED; + ctl[1] &= ~RX8130_REG_FLAG_AF; ctl[2] &= ~RX8130_REG_CONTROL0_AIE; ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, sizeof(ctl)); if (ret < 0) - goto out; + return IRQ_HANDLED; rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); -out: - rtc_unlock(ds1307->rtc); - return IRQ_HANDLED; }