diff options
Diffstat (limited to 'arch/arm/plat-mxc/time.c')
-rw-r--r-- | arch/arm/plat-mxc/time.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index 758a1293bcfa..ef1b3cd85bd3 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c | |||
@@ -34,9 +34,6 @@ | |||
34 | static struct clock_event_device clockevent_mxc; | 34 | static struct clock_event_device clockevent_mxc; |
35 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; | 35 | static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; |
36 | 36 | ||
37 | /* clock source for the timer */ | ||
38 | static struct clk *timer_clk; | ||
39 | |||
40 | /* clock source */ | 37 | /* clock source */ |
41 | 38 | ||
42 | static cycle_t mxc_get_cycles(void) | 39 | static cycle_t mxc_get_cycles(void) |
@@ -53,13 +50,11 @@ static struct clocksource clocksource_mxc = { | |||
53 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 50 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
54 | }; | 51 | }; |
55 | 52 | ||
56 | static int __init mxc_clocksource_init(void) | 53 | static int __init mxc_clocksource_init(struct clk *timer_clk) |
57 | { | 54 | { |
58 | unsigned int clock; | 55 | unsigned int c = clk_get_rate(timer_clk); |
59 | |||
60 | clock = clk_get_rate(timer_clk); | ||
61 | 56 | ||
62 | clocksource_mxc.mult = clocksource_hz2mult(clock, | 57 | clocksource_mxc.mult = clocksource_hz2mult(c, |
63 | clocksource_mxc.shift); | 58 | clocksource_mxc.shift); |
64 | clocksource_register(&clocksource_mxc); | 59 | clocksource_register(&clocksource_mxc); |
65 | 60 | ||
@@ -177,13 +172,11 @@ static struct clock_event_device clockevent_mxc = { | |||
177 | .rating = 200, | 172 | .rating = 200, |
178 | }; | 173 | }; |
179 | 174 | ||
180 | static int __init mxc_clockevent_init(void) | 175 | static int __init mxc_clockevent_init(struct clk *timer_clk) |
181 | { | 176 | { |
182 | unsigned int clock; | 177 | unsigned int c = clk_get_rate(timer_clk); |
183 | |||
184 | clock = clk_get_rate(timer_clk); | ||
185 | 178 | ||
186 | clockevent_mxc.mult = div_sc(clock, NSEC_PER_SEC, | 179 | clockevent_mxc.mult = div_sc(c, NSEC_PER_SEC, |
187 | clockevent_mxc.shift); | 180 | clockevent_mxc.shift); |
188 | clockevent_mxc.max_delta_ns = | 181 | clockevent_mxc.max_delta_ns = |
189 | clockevent_delta2ns(0xfffffffe, &clockevent_mxc); | 182 | clockevent_delta2ns(0xfffffffe, &clockevent_mxc); |
@@ -197,14 +190,8 @@ static int __init mxc_clockevent_init(void) | |||
197 | return 0; | 190 | return 0; |
198 | } | 191 | } |
199 | 192 | ||
200 | void __init mxc_timer_init(const char *clk_timer) | 193 | void __init mxc_timer_init(struct clk *timer_clk) |
201 | { | 194 | { |
202 | timer_clk = clk_get(NULL, clk_timer); | ||
203 | if (!timer_clk) { | ||
204 | printk(KERN_ERR"Cannot determine timer clock. Giving up.\n"); | ||
205 | return; | ||
206 | } | ||
207 | |||
208 | clk_enable(timer_clk); | 195 | clk_enable(timer_clk); |
209 | 196 | ||
210 | /* | 197 | /* |
@@ -219,10 +206,9 @@ void __init mxc_timer_init(const char *clk_timer) | |||
219 | TIMER_BASE + MXC_TCTL); | 206 | TIMER_BASE + MXC_TCTL); |
220 | 207 | ||
221 | /* init and register the timer to the framework */ | 208 | /* init and register the timer to the framework */ |
222 | mxc_clocksource_init(); | 209 | mxc_clocksource_init(timer_clk); |
223 | mxc_clockevent_init(); | 210 | mxc_clockevent_init(timer_clk); |
224 | 211 | ||
225 | /* Make irqs happen */ | 212 | /* Make irqs happen */ |
226 | setup_irq(TIMER_INTERRUPT, &mxc_timer_irq); | 213 | setup_irq(TIMER_INTERRUPT, &mxc_timer_irq); |
227 | } | 214 | } |
228 | |||