rtc: snvs: make sure clock is enabled for interrupt handle
authorAnson Huang <anson.huang@nxp.com>
Fri, 11 Jan 2019 07:09:02 +0000 (07:09 +0000)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Tue, 5 Feb 2019 22:11:31 +0000 (23:11 +0100)
During system suspend, the SNVS RTC's clock will be disabled in
noirq suspend phase, but SNVS RTC's alarm interrupt could still
arrive, system will hang if SNVS RTC driver tries to access register
without clock enabled, this patch fixes the issue of this scenario.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-snvs.c

index b2483a749ac45fa58c4f9a7dd507ca19775222ca..0b9eff19149b13ee2537b0c62088de013dc7eec5 100644 (file)
@@ -239,6 +239,9 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)
        u32 lpsr;
        u32 events = 0;
 
+       if (data->clk)
+               clk_enable(data->clk);
+
        regmap_read(data->regmap, data->offset + SNVS_LPSR, &lpsr);
 
        if (lpsr & SNVS_LPSR_LPTA) {
@@ -253,6 +256,9 @@ static irqreturn_t snvs_rtc_irq_handler(int irq, void *dev_id)
        /* clear interrupt status */
        regmap_write(data->regmap, data->offset + SNVS_LPSR, lpsr);
 
+       if (data->clk)
+               clk_disable(data->clk);
+
        return events ? IRQ_HANDLED : IRQ_NONE;
 }