summaryrefslogtreecommitdiff
path: root/arch/arm/plat-omap/dmtimer.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2012-03-27 21:21:44 -0700
committerOlof Johansson <olof@lixom.net>2012-03-27 21:24:03 -0700
commit1f5b7dcfdad3840d4bce27ab0b3cc8f376b81544 (patch)
tree41ea81fdecc67d766789ea3e46b1a49773dc8ec4 /arch/arm/plat-omap/dmtimer.c
parent4788d72ce6c0d71220c06a242f935a056eccf424 (diff)
parent489e7bece7f6859a7df484a4dce08fa51fb0d876 (diff)
Merge branch 'fixes-non-critical' into next/drivers2
fixes-non-critical has already been merged upstream, and there are a handful of annoying context conflicts that it makes sense to resolve before sending up. Part of this is because there was parallel development going on between more urgent fixes and general driver fixups, it should settle down once the lpc32xx platform reaches a more steady state. Conflicts: arch/arm/mach-lpc32xx/clock.c arch/arm/mach-lpc32xx/common.h Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/plat-omap/dmtimer.c')
-rw-r--r--arch/arm/plat-omap/dmtimer.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index af3b92be8459..0b77fe87e010 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -80,9 +80,9 @@ static void omap_dm_timer_write_reg(struct omap_dm_timer *timer, u32 reg,
static void omap_timer_restore_context(struct omap_dm_timer *timer)
{
- omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_OFFSET,
- timer->context.tiocp_cfg);
- if (timer->revision > 1)
+ __raw_writel(timer->context.tiocp_cfg,
+ timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET);
+ if (timer->revision == 1)
__raw_writel(timer->context.tistat, timer->sys_stat);
__raw_writel(timer->context.tisr, timer->irq_stat);
@@ -357,6 +357,19 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer)
__omap_dm_timer_stop(timer, timer->posted, rate);
+ if (timer->loses_context && timer->get_context_loss_count)
+ timer->ctx_loss_count =
+ timer->get_context_loss_count(&timer->pdev->dev);
+
+ /*
+ * Since the register values are computed and written within
+ * __omap_dm_timer_stop, we need to use read to retrieve the
+ * context.
+ */
+ timer->context.tclr =
+ omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+ timer->context.tisr = __raw_readl(timer->irq_stat);
+ omap_dm_timer_disable(timer);
return 0;
}
EXPORT_SYMBOL_GPL(omap_dm_timer_stop);