Commit 589ccfa4 authored by Jagadeesh Bhaskar Pakaravoor's avatar Jagadeesh Bhaskar Pakaravoor Committed by Tony Lindgren

rtc-twl4030: Fix periodic interrupt

RTC generates an extra spurious interrupt for every actual periodic
interrupt. This is due to a problem with the RTC_IT bit of
REG_PWR_ISR1. It requires two writes or two reads (when COR is
enabled) to clear it. Since COR is enabled and one read of the same
register is done already (inside twl4030-pwrirq.c do_twl4030_pwrirq()
function), we can do away with a need to add one more write into the
same register inside the interrupt handler, by replacing the write
currently present with just one extra read.
Signed-off-by: default avatarJagadeesh Bhaskar Pakaravoor <j-pakaravoor@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent ecac18af
...@@ -322,8 +322,13 @@ static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc) ...@@ -322,8 +322,13 @@ static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc)
REG_RTC_STATUS_REG); REG_RTC_STATUS_REG);
if (res) if (res)
goto out; goto out;
res = twl4030_i2c_write_u8(TWL4030_MODULE_INT,
PWR_RTC_INT_CLR, REG_PWR_ISR1); /* Clear on Read enabled. RTC_IT bit of REG_PWR_ISR1 needs
* 2 reads to clear the interrupt. One read is done in
* do_twl4030_pwrirq(). Doing the second read, to clear
* the bit.
*/
res = twl4030_i2c_read_u8(TWL4030_MODULE_INT, &rd_reg, REG_PWR_ISR1);
if (res) if (res)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment