2011-09-14 09:10:54 +02: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 09:30:20 +02:00
# include <linux/errno.h>
2011-09-14 09:10:54 +02:00
# include <linux/clksrc-dbx500-prcmu.h>
2013-02-06 21:17:47 -06:00
# include <linux/clocksource.h>
2012-03-16 09:53:24 +00:00
# include <linux/of.h>
2012-04-24 10:04:46 +01:00
# include <linux/of_address.h>
2011-09-14 09:10:54 +02:00
2013-03-21 22:51:12 +01:00
# include "setup.h"
2011-09-14 09:10:54 +02:00
2013-03-19 15:41:55 +01:00
# include "db8500-regs.h"
2012-09-19 19:31:19 +02:00
# include "id.h"
2012-04-24 10:04:46 +01:00
const static struct of_device_id prcmu_timer_of_match [ ] __initconst = {
{ . compatible = " stericsson,db8500-prcmu-timer-4 " , } ,
{ } ,
} ;
2012-11-08 12:40:59 -07:00
void __init ux500_timer_init ( void )
2011-09-14 09:10:54 +02:00
{
2011-10-03 09:30:20 +02:00
void __iomem * prcmu_timer_base ;
2012-04-24 10:04:46 +01:00
void __iomem * tmp_base ;
struct device_node * np ;
2011-10-03 09:30:20 +02:00
2013-11-19 22:17:06 +01:00
if ( cpu_is_u8500_family ( ) | | cpu_is_ux540_family ( ) )
2011-10-03 09:30:20 +02:00
prcmu_timer_base = __io_address ( U8500_PRCMU_TIMER_4_BASE ) ;
2013-11-19 22:17:06 +01:00
else
2011-09-14 09:10:54 +02:00
ux500_unknown_soc ( ) ;
2013-11-06 10:05:48 +00:00
np = of_find_matching_node ( NULL , prcmu_timer_of_match ) ;
if ( ! np )
goto dt_fail ;
2012-04-24 10:04:46 +01:00
2013-11-06 10:05:48 +00:00
tmp_base = of_iomap ( np , 0 ) ;
if ( ! tmp_base )
goto dt_fail ;
2012-04-24 10:04:46 +01:00
2013-11-06 10:05:48 +00:00
prcmu_timer_base = tmp_base ;
2012-04-24 10:04:46 +01:00
dt_fail :
2011-10-03 09:30:20 +02:00
clksrc_dbx500_prcmu_init ( prcmu_timer_base ) ;
2013-11-19 22:37:55 +01:00
clocksource_of_init ( ) ;
2011-09-14 09:10:54 +02:00
}