| 1 | |
| 2 | |
| 3 | * linux/arch/arm/kernel/arch_timer.c
|
| 4 | *
|
| 5 | * Copyright (C) 2011 ARM Ltd.
|
| 6 | * All Rights Reserved
|
| 7 |
|
| 8 | #include <linux/init.h>
|
| 9 | #include <linux/types.h>
|
| 10 | #include <linux/errno.h>
|
| 11 |
|
| 12 | #include <asm/delay.h>
|
| 13 | #include <asm/arch_timer.h>
|
| 14 |
|
| 15 | #include <clocksource/arm_arch_timer.h>
|
| 16 |
|
| 17 | static unsigned long arch_timer_read_counter_long(void)
|
| 18 | {
|
| 19 | return arch_timer_read_counter();
|
| 20 | }
|
| 21 |
|
| 22 | static struct delay_timer arch_delay_timer;
|
| 23 |
|
| 24 | static void __init arch_timer_delay_timer_register(void)
|
| 25 | {
|
| 26 |
|
| 27 | arch_delay_timer.read_current_timer = arch_timer_read_counter_long;
|
| 28 | arch_delay_timer.freq = arch_timer_get_rate();
|
| 29 | register_current_timer_delay(&arch_delay_timer);
|
| 30 | }
|
| 31 |
|
| 32 | int __init arch_timer_arch_init(void)
|
| 33 | {
|
| 34 | u32 arch_timer_rate = arch_timer_get_rate();
|
| 35 |
|
| 36 | if (arch_timer_rate == 0)
|
| 37 | return -ENXIO;
|
| 38 |
|
| 39 | arch_timer_delay_timer_register();
|
| 40 |
|
| 41 | return 0;
|
| 42 | }
|