Re: [PATCH 03/11] OMAP2/3: DMTIMER: Clear pending interrupts when stopping a timer

2009-11-11 Thread Kevin Hilman
Tero Kristo tero.kri...@nokia.com writes:

 From: Tero Kristo tero.kri...@nokia.com

 OMAP GP timers keep running for a few cycles after they are stopped,
 which can cause the timer to expire and generate an interrupt. The pending
 interrupt will prevent e.g. OMAP from entering suspend, thus we ack it
 manually.

 Signed-off-by: Tero Kristo tero.kri...@nokia.com

Thanks, applying to PM branch, queueing in pm-fixes.

Kevin

 ---
  arch/arm/plat-omap/dmtimer.c |   10 ++
  1 files changed, 10 insertions(+), 0 deletions(-)

 diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
 index 830b072..09a623d 100644
 --- a/arch/arm/plat-omap/dmtimer.c
 +++ b/arch/arm/plat-omap/dmtimer.c
 @@ -551,6 +551,16 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer)
   if (l  OMAP_TIMER_CTRL_ST) {
   l = ~0x1;
   omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
 + /* Readback to make sure write has completed */
 + omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
 +  /*
 +   * Wait for functional clock period x 3.5 to make sure that
 +   * timer is stopped
 +   */
 + udelay(350 / clk_get_rate(timer-fclk) + 1);
 + /* Ack possibly pending interrupt */
 + omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG,
 + OMAP_TIMER_INT_OVERFLOW);
   }
  }
  EXPORT_SYMBOL_GPL(omap_dm_timer_stop);
 -- 
 1.5.4.3

 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 03/11] OMAP2/3: DMTIMER: Clear pending interrupts when stopping a timer

2009-10-23 Thread Tero Kristo
From: Tero Kristo tero.kri...@nokia.com

OMAP GP timers keep running for a few cycles after they are stopped,
which can cause the timer to expire and generate an interrupt. The pending
interrupt will prevent e.g. OMAP from entering suspend, thus we ack it
manually.

Signed-off-by: Tero Kristo tero.kri...@nokia.com
---
 arch/arm/plat-omap/dmtimer.c |   10 ++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 830b072..09a623d 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -551,6 +551,16 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer)
if (l  OMAP_TIMER_CTRL_ST) {
l = ~0x1;
omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+   /* Readback to make sure write has completed */
+   omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+/*
+ * Wait for functional clock period x 3.5 to make sure that
+ * timer is stopped
+ */
+   udelay(350 / clk_get_rate(timer-fclk) + 1);
+   /* Ack possibly pending interrupt */
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG,
+   OMAP_TIMER_INT_OVERFLOW);
}
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_stop);
-- 
1.5.4.3

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html