2012-01-11 17:25:17 +00:00
/*
* linux / arch / arm / kernel / arch_timer . c
*
* Copyright ( C ) 2011 ARM Ltd .
* All Rights Reserved
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/init.h>
2012-11-12 14:33:44 +00:00
# include <linux/types.h>
2013-02-14 17:45:25 +01:00
# include <linux/errno.h>
2012-01-11 17:25:17 +00:00
2012-09-21 18:51:44 +01:00
# include <asm/delay.h>
2012-01-11 17:25:17 +00:00
2012-11-12 14:33:44 +00:00
# include <clocksource/arm_arch_timer.h>
2012-09-07 18:09:57 +01:00
2012-11-12 14:33:44 +00:00
static unsigned long arch_timer_read_counter_long ( void )
2012-01-11 17:25:17 +00:00
{
2012-11-14 09:50:19 +00:00
return arch_timer_read_counter ( ) ;
2012-01-11 17:25:17 +00:00
}
2012-11-12 14:33:44 +00:00
static struct delay_timer arch_delay_timer ;
2012-01-20 10:47:00 +00:00
2012-11-12 14:33:44 +00:00
static void __init arch_timer_delay_timer_register ( void )
2012-01-11 17:25:17 +00:00
{
2012-09-21 18:51:44 +01:00
/* Use the architected timer for the delay loop. */
2012-11-12 14:33:44 +00:00
arch_delay_timer . read_current_timer = arch_timer_read_counter_long ;
arch_delay_timer . freq = arch_timer_get_rate ( ) ;
2012-09-21 18:51:44 +01:00
register_current_timer_delay ( & arch_delay_timer ) ;
2012-01-11 17:25:17 +00:00
}
2011-01-14 15:32:36 +00:00
2013-04-10 18:27:51 -05:00
int __init arch_timer_arch_init ( void )
2011-01-14 15:32:36 +00:00
{
2013-03-11 16:23:46 -05:00
u32 arch_timer_rate = arch_timer_get_rate ( ) ;
if ( arch_timer_rate = = 0 )
2012-11-12 14:33:44 +00:00
return - ENXIO ;
2011-01-14 15:32:36 +00:00
2013-04-10 18:27:51 -05:00
arch_timer_delay_timer_register ( ) ;
2011-01-14 15:32:36 +00:00
return 0 ;
}