diff options
Diffstat (limited to 'arch/arm/plat-spear/time.c')
-rw-r--r-- | arch/arm/plat-spear/time.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/arch/arm/plat-spear/time.c b/arch/arm/plat-spear/time.c index a3164d1647fd..9a378987bbb1 100644 --- a/arch/arm/plat-spear/time.c +++ b/arch/arm/plat-spear/time.c | |||
@@ -18,6 +18,8 @@ | |||
18 | #include <linux/ioport.h> | 18 | #include <linux/ioport.h> |
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/of_irq.h> | ||
22 | #include <linux/of_address.h> | ||
21 | #include <linux/time.h> | 23 | #include <linux/time.h> |
22 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
23 | #include <asm/mach/time.h> | 25 | #include <asm/mach/time.h> |
@@ -197,19 +199,32 @@ static void __init spear_clockevent_init(int irq) | |||
197 | setup_irq(irq, &spear_timer_irq); | 199 | setup_irq(irq, &spear_timer_irq); |
198 | } | 200 | } |
199 | 201 | ||
200 | void __init spear_setup_timer(resource_size_t base, int irq) | 202 | const static struct of_device_id timer_of_match[] __initconst = { |
203 | { .compatible = "st,spear-timer", }, | ||
204 | { }, | ||
205 | }; | ||
206 | |||
207 | void __init spear_setup_of_timer(void) | ||
201 | { | 208 | { |
202 | int ret; | 209 | struct device_node *np; |
210 | int irq, ret; | ||
211 | |||
212 | np = of_find_matching_node(NULL, timer_of_match); | ||
213 | if (!np) { | ||
214 | pr_err("%s: No timer passed via DT\n", __func__); | ||
215 | return; | ||
216 | } | ||
203 | 217 | ||
204 | if (!request_mem_region(base, SZ_1K, "gpt0")) { | 218 | irq = irq_of_parse_and_map(np, 0); |
205 | pr_err("%s:cannot get IO addr\n", __func__); | 219 | if (!irq) { |
220 | pr_err("%s: No irq passed for timer via DT\n", __func__); | ||
206 | return; | 221 | return; |
207 | } | 222 | } |
208 | 223 | ||
209 | gpt_base = ioremap(base, SZ_1K); | 224 | gpt_base = of_iomap(np, 0); |
210 | if (!gpt_base) { | 225 | if (!gpt_base) { |
211 | pr_err("%s:ioremap failed for gpt\n", __func__); | 226 | pr_err("%s: of iomap failed\n", __func__); |
212 | goto err_mem; | 227 | return; |
213 | } | 228 | } |
214 | 229 | ||
215 | gpt_clk = clk_get_sys("gpt0", NULL); | 230 | gpt_clk = clk_get_sys("gpt0", NULL); |
@@ -233,6 +248,4 @@ err_clk: | |||
233 | clk_put(gpt_clk); | 248 | clk_put(gpt_clk); |
234 | err_iomap: | 249 | err_iomap: |
235 | iounmap(gpt_base); | 250 | iounmap(gpt_base); |
236 | err_mem: | ||
237 | release_mem_region(base, SZ_1K); | ||
238 | } | 251 | } |