2011-09-14 11:10:54 +04:00
/*
* Copyright ( C ) ST - Ericsson SA 2011
*
* License Terms : GNU General Public License v2
* Author : Mattias Wallin < mattias . wallin @ stericsson . com > for ST - Ericsson
*/
# include <linux/io.h>
2011-10-03 11:30:20 +04:00
# include <linux/errno.h>
2011-09-14 11:10:54 +04:00
# include <linux/clksrc-dbx500-prcmu.h>
2013-02-07 07:17:47 +04:00
# include <linux/clocksource.h>
2012-03-16 13:53:24 +04:00
# include <linux/of.h>
2012-04-24 13:04:46 +04:00
# include <linux/of_address.h>
2011-09-14 11:10:54 +04:00
2013-03-22 01:51:12 +04:00
# include "setup.h"
2011-09-14 11:10:54 +04:00
2013-03-19 18:41:55 +04:00
# include "db8500-regs.h"
2012-09-19 21:31:19 +04:00
# include "id.h"
2012-04-24 13:04:46 +04:00
const static struct of_device_id prcmu_timer_of_match [ ] __initconst = {
{ . compatible = " stericsson,db8500-prcmu-timer-4 " , } ,
{ } ,
} ;
2012-11-08 23:40:59 +04:00
void __init ux500_timer_init ( void )
2011-09-14 11:10:54 +04:00
{
2011-10-03 11:30:20 +04:00
void __iomem * prcmu_timer_base ;
2012-04-24 13:04:46 +04:00
void __iomem * tmp_base ;
struct device_node * np ;
2011-10-03 11:30:20 +04:00
2013-11-20 01:17:06 +04:00
if ( cpu_is_u8500_family ( ) | | cpu_is_ux540_family ( ) )
2011-10-03 11:30:20 +04:00
prcmu_timer_base = __io_address ( U8500_PRCMU_TIMER_4_BASE ) ;
2013-11-20 01:17:06 +04:00
else
2011-09-14 11:10:54 +04:00
ux500_unknown_soc ( ) ;
2013-11-06 14:05:48 +04:00
np = of_find_matching_node ( NULL , prcmu_timer_of_match ) ;
if ( ! np )
goto dt_fail ;
2012-04-24 13:04:46 +04:00
2013-11-06 14:05:48 +04:00
tmp_base = of_iomap ( np , 0 ) ;
if ( ! tmp_base )
goto dt_fail ;
2012-04-24 13:04:46 +04:00
2013-11-06 14:05:48 +04:00
prcmu_timer_base = tmp_base ;
2012-04-24 13:04:46 +04:00
dt_fail :
2011-10-03 11:30:20 +04:00
clksrc_dbx500_prcmu_init ( prcmu_timer_base ) ;
2013-11-20 01:37:55 +04:00
clocksource_of_init ( ) ;
2011-09-14 11:10:54 +04:00
}