2012-11-19 16:41:20 -07:00
/*
* Copyright ( c ) 2012 , NVIDIA CORPORATION . All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2015-09-28 15:49:15 +01:00
# include <linux/acpi.h>
2012-11-19 16:41:20 -07:00
# include <linux/init.h>
# include <linux/of.h>
2013-03-19 15:38:50 +01:00
# include <linux/clocksource.h>
2012-11-19 16:41:20 -07:00
2017-05-26 18:33:27 +02:00
extern struct of_device_id __timer_of_table [ ] ;
2012-11-19 16:41:20 -07:00
2017-05-26 18:33:27 +02:00
static const struct of_device_id __timer_of_table_sentinel
__used __section ( __timer_of_table_end ) ;
2012-11-19 16:41:20 -07:00
2017-05-26 17:40:46 +02:00
void __init timer_probe ( void )
2012-11-19 16:41:20 -07:00
{
struct device_node * np ;
const struct of_device_id * match ;
2016-05-31 16:25:59 +02:00
of_init_fn_1_ret init_func_ret ;
2017-05-26 18:33:27 +02:00
unsigned timers = 0 ;
2016-05-31 16:25:59 +02:00
int ret ;
2012-11-19 16:41:20 -07:00
2017-05-26 18:33:27 +02:00
for_each_matching_node_and_match ( np , __timer_of_table , & match ) {
2013-09-26 02:08:17 +02:00
if ( ! of_device_is_available ( np ) )
continue ;
2016-05-31 16:25:59 +02:00
init_func_ret = match - > data ;
ret = init_func_ret ( np ) ;
if ( ret ) {
2017-07-18 16:42:53 -05:00
pr_err ( " Failed to initialize '%pOF': %d \n " , np , ret ) ;
2016-05-31 16:25:59 +02:00
continue ;
}
2017-05-26 18:33:27 +02:00
timers + + ;
2016-05-31 16:25:59 +02:00
}
2017-05-26 18:33:27 +02:00
timers + = acpi_probe_device_table ( timer ) ;
2015-09-28 15:49:15 +01:00
2017-05-26 18:33:27 +02:00
if ( ! timers )
pr_crit ( " %s: no matching timers found \n " , __func__ ) ;
2012-11-19 16:41:20 -07:00
}