}
 }
 
-static struct of_device_id bcm2835_time_match[] __initconst = {
-       { .compatible = "brcm,bcm2835-system-timer" },
-       {}
-};
-
-static void __init bcm2835_timer_init(void)
+static void __init bcm2835_timer_init(struct device_node *node)
 {
-       struct device_node *node;
        void __iomem *base;
        u32 freq;
        int irq;
        struct bcm2835_timer *timer;
 
-       node = of_find_matching_node(NULL, bcm2835_time_match);
-       if (!node)
-               panic("No bcm2835 timer node");
-
        base = of_iomap(node, 0);
        if (!base)
                panic("Can't remap registers");
 
 {
        struct device_node *np;
        const struct of_device_id *match;
-       void (*init_func)(void);
+       void (*init_func)(struct device_node *);
 
        for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
                init_func = match->data;
-               init_func();
+               init_func(np);
        }
 }
 
        {}
 };
 
-static void __init tegra20_init_timer(void)
+static void __init tegra20_init_timer(struct device_node *np)
 {
-       struct device_node *np;
        struct clk *clk;
        unsigned long rate;
        int ret;
 
        .dev_id  = &clockevent,
 };
 
-static struct of_device_id vt8500_timer_ids[] = {
-       { .compatible = "via,vt8500-timer" },
-       { }
-};
-
-static void __init vt8500_timer_init(void)
+static void __init vt8500_timer_init(struct device_node *np)
 {
-       struct device_node *np;
        int timer_irq;
 
-       np = of_find_matching_node(NULL, vt8500_timer_ids);
-       if (!np) {
-               pr_err("%s: Timer description missing from Device Tree\n",
-                                                               __func__);
-               return;
-       }
        regbase = of_iomap(np, 0);
        if (!regbase) {
                pr_err("%s: Missing iobase description in Device Tree\n",