summaryrefslogtreecommitdiff
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2010-09-17 13:51:48 -0700
committerColin Cross <ccross@android.com>2010-10-06 16:28:39 -0700
commit1e6ba98f9315642e95ff0b7d08d32e42f601b444 (patch)
tree8d95ff598532704616ba9ac0a7d7a1e8e2db6ebc /arch/arm/kernel
parent71f142dd095287a0fc352f6db10128f29ffd5ba9 (diff)
[ARM] twd: Fix prescaler getting cleared by set_mode
Change-Id: I98d4b02feeb9784591504c59a82058a58bbd038e Signed-off-by: Colin Cross <ccross@android.com>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/smp_twd.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
index 2b4f92788c0e..a0db5474bdbe 100644
--- a/arch/arm/kernel/smp_twd.c
+++ b/arch/arm/kernel/smp_twd.c
@@ -31,22 +31,23 @@ static unsigned long twd_target_rate;
static void twd_set_mode(enum clock_event_mode mode,
struct clock_event_device *clk)
{
- unsigned long ctrl;
+ unsigned long ctrl = __raw_readl(twd_base + TWD_TIMER_CONTROL);
+ ctrl |= TWD_TIMER_CONTROL_PRESCALE_MASK;
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
/* timer load already set up */
- ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
+ ctrl |= TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
| TWD_TIMER_CONTROL_PERIODIC;
break;
case CLOCK_EVT_MODE_ONESHOT:
/* period set, and timer enabled in 'next_event' hook */
- ctrl = TWD_TIMER_CONTROL_IT_ENABLE | TWD_TIMER_CONTROL_ONESHOT;
+ ctrl |= TWD_TIMER_CONTROL_IT_ENABLE | TWD_TIMER_CONTROL_ONESHOT;
break;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
default:
- ctrl = 0;
+ break;
}
__raw_writel(ctrl, twd_base + TWD_TIMER_CONTROL);
@@ -145,9 +146,8 @@ static void __cpuinit twd_calibrate_rate(unsigned long target_rate,
twd_target_rate = target_rate;
cpu_rate = twd_timer_rate * periphclk_prescaler;
- twd_recalc_prescaler(cpu_rate);
-
twd_timer_rate = twd_target_rate;
+ twd_recalc_prescaler(cpu_rate);
}
printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000,