mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
rtc: ds3232: use guard
Use guard() to simplify error handling Link: https://patch.msgid.link/20261019211827.126262-9-alexandre.belloni@bootlin.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
5162e9ad18
commit
32643217d8
|
|
@ -389,45 +389,39 @@ static irqreturn_t ds3232_irq(int irq, void *dev_id)
|
|||
int ret;
|
||||
int stat, control;
|
||||
|
||||
rtc_lock(ds3232->rtc);
|
||||
guard(rtc_ops)(ds3232->rtc);
|
||||
|
||||
ret = regmap_read(ds3232->regmap, DS3232_REG_SR, &stat);
|
||||
if (ret)
|
||||
goto unlock;
|
||||
return IRQ_HANDLED;
|
||||
|
||||
if (stat & DS3232_REG_SR_A1F) {
|
||||
ret = regmap_read(ds3232->regmap, DS3232_REG_CR, &control);
|
||||
if (ret) {
|
||||
dev_warn(ds3232->dev,
|
||||
"Read Control Register error %d\n", ret);
|
||||
} else {
|
||||
/* disable alarm1 interrupt */
|
||||
control &= ~(DS3232_REG_CR_A1IE);
|
||||
ret = regmap_write(ds3232->regmap, DS3232_REG_CR,
|
||||
control);
|
||||
if (ret) {
|
||||
dev_warn(ds3232->dev,
|
||||
"Write Control Register error %d\n",
|
||||
ret);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
/* clear the alarm pend flag */
|
||||
stat &= ~DS3232_REG_SR_A1F;
|
||||
ret = regmap_write(ds3232->regmap, DS3232_REG_SR, stat);
|
||||
if (ret) {
|
||||
dev_warn(ds3232->dev,
|
||||
"Write Status Register error %d\n",
|
||||
ret);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
/* disable alarm1 interrupt */
|
||||
control &= ~(DS3232_REG_CR_A1IE);
|
||||
ret = regmap_write(ds3232->regmap, DS3232_REG_CR, control);
|
||||
if (ret) {
|
||||
dev_warn(ds3232->dev,
|
||||
"Write Control Register error %d\n", ret);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
}
|
||||
|
||||
unlock:
|
||||
rtc_unlock(ds3232->rtc);
|
||||
/* clear the alarm pend flag */
|
||||
stat &= ~DS3232_REG_SR_A1F;
|
||||
ret = regmap_write(ds3232->regmap, DS3232_REG_SR, stat);
|
||||
if (ret) {
|
||||
dev_warn(ds3232->dev,
|
||||
"Write Status Register error %d\n", ret);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
rtc_update_irq(ds3232->rtc, 1, RTC_AF | RTC_IRQF);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user