Skip to content

Commit

Permalink
ARM: 7086/2: mach-integrator: modernize clock event registration
Browse files Browse the repository at this point in the history
Drop mult, shift and delta calculations and let the
clockevent core scale this as appropriate.

Set the minimum interval to 1 rather than 15 (0xf), there
is nothing in the data sheets I have indicating that 15
should be some minimum value.

Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Linus Walleij authored and Russell King committed Oct 17, 2011
1 parent 02f5632 commit 6d8ce71
Showing 1 changed file with 5 additions and 10 deletions.
15 changes: 5 additions & 10 deletions arch/arm/mach-integrator/integrator_ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,12 +398,10 @@ static int clkevt_set_next_event(unsigned long next, struct clock_event_device *

static struct clock_event_device integrator_clockevent = {
.name = "timer1",
.shift = 34,
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
.set_mode = clkevt_set_mode,
.set_next_event = clkevt_set_next_event,
.rating = 300,
.cpumask = cpu_all_mask,
};

static struct irqaction integrator_timer_irq = {
Expand All @@ -415,27 +413,24 @@ static struct irqaction integrator_timer_irq = {

static void integrator_clockevent_init(u32 khz)
{
struct clock_event_device *evt = &integrator_clockevent;
unsigned int ctrl = 0;

/* Calculate and program a divisor */
if (khz * 1000 > 0x100000 * HZ) {
khz /= 256;
ctrl |= TIMER_CTRL_DIV256;
} else if (khz * 1000 > 0x10000 * HZ) {
khz /= 16;
ctrl |= TIMER_CTRL_DIV16;
}

timer_reload = khz * 1000 / HZ;
writel(ctrl, clkevt_base + TIMER_CTRL);

evt->irq = IRQ_TIMERINT1;
evt->mult = div_sc(khz, NSEC_PER_MSEC, evt->shift);
evt->max_delta_ns = clockevent_delta2ns(0xffff, evt);
evt->min_delta_ns = clockevent_delta2ns(0xf, evt);

setup_irq(IRQ_TIMERINT1, &integrator_timer_irq);
clockevents_register_device(evt);
clockevents_config_and_register(&integrator_clockevent,
khz * 1000,
1,
0xffffU);
}

/*
Expand Down

0 comments on commit 6d8ce71

Please sign in to comment.