2012-11-20 03:41:20 +04: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 17:49:15 +03:00
# include <linux/acpi.h>
2012-11-20 03:41:20 +04:00
# include <linux/init.h>
# include <linux/of.h>
2013-03-19 18:38:50 +04:00
# include <linux/clocksource.h>
2012-11-20 03:41:20 +04:00
2017-05-26 19:33:27 +03:00
extern struct of_device_id __timer_of_table [ ] ;
2012-11-20 03:41:20 +04:00
2017-05-26 19:33:27 +03:00
static const struct of_device_id __timer_of_table_sentinel
__used __section ( __timer_of_table_end ) ;
2012-11-20 03:41:20 +04:00
2017-05-26 18:40:46 +03:00
void __init timer_probe ( void )
2012-11-20 03:41:20 +04:00
{
struct device_node * np ;
const struct of_device_id * match ;
2016-05-31 17:25:59 +03:00
of_init_fn_1_ret init_func_ret ;
2017-05-26 19:33:27 +03:00
unsigned timers = 0 ;
2016-05-31 17:25:59 +03:00
int ret ;
2012-11-20 03:41:20 +04:00
2017-05-26 19:33:27 +03:00
for_each_matching_node_and_match ( np , __timer_of_table , & match ) {
2013-09-26 04:08:17 +04:00
if ( ! of_device_is_available ( np ) )
continue ;
2016-05-31 17:25:59 +03:00
init_func_ret = match - > data ;
ret = init_func_ret ( np ) ;
if ( ret ) {
2017-07-19 00:42:53 +03:00
pr_err ( " Failed to initialize '%pOF': %d \n " , np , ret ) ;
2016-05-31 17:25:59 +03:00
continue ;
}
2017-05-26 19:33:27 +03:00
timers + + ;
2016-05-31 17:25:59 +03:00
}
2017-05-26 19:33:27 +03:00
timers + = acpi_probe_device_table ( timer ) ;
2015-09-28 17:49:15 +03:00
2017-05-26 19:33:27 +03:00
if ( ! timers )
pr_crit ( " %s: no matching timers found \n " , __func__ ) ;
2012-11-20 03:41:20 +04:00
}