Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-only 2 : : /* 3 : : * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. 4 : : */ 5 : : 6 : : #include <linux/acpi.h> 7 : : #include <linux/init.h> 8 : : #include <linux/of.h> 9 : : #include <linux/clocksource.h> 10 : : 11 : : extern struct of_device_id __timer_of_table[]; 12 : : 13 : : static const struct of_device_id __timer_of_table_sentinel 14 : : __used __section(__timer_of_table_end); 15 : : 16 : 3 : void __init timer_probe(void) 17 : : { 18 : : struct device_node *np; 19 : : const struct of_device_id *match; 20 : : of_init_fn_1_ret init_func_ret; 21 : : unsigned timers = 0; 22 : : int ret; 23 : : 24 : 3 : for_each_matching_node_and_match(np, __timer_of_table, &match) { 25 : 3 : if (!of_device_is_available(np)) 26 : 0 : continue; 27 : : 28 : 3 : init_func_ret = match->data; 29 : : 30 : 3 : ret = init_func_ret(np); 31 : 3 : if (ret) { 32 : 0 : if (ret != -EPROBE_DEFER) 33 : 0 : pr_err("Failed to initialize '%pOF': %d\n", np, 34 : : ret); 35 : 0 : continue; 36 : : } 37 : : 38 : 3 : timers++; 39 : : } 40 : : 41 : 3 : timers += acpi_probe_device_table(timer); 42 : : 43 : 3 : if (!timers) 44 : 0 : pr_crit("%s: no matching timers found\n", __func__); 45 : 3 : }