static void __init of_at91_pmc_setup(struct device_node *np, const struct at91_pmc_caps *caps) { struct at91_pmc *pmc; struct device_node *childnp; void (*clk_setup)(struct device_node *, struct at91_pmc *); const struct of_device_id *clk_id; void __iomem *regbase = of_iomap(np, 0); int virq; if (!regbase) return; virq = irq_of_parse_and_map(np, 0); if (!virq) return; pmc = at91_pmc_init(np, regbase, virq, caps); if (!pmc) return; for_each_child_of_node(np, childnp) { clk_id = of_match_node(pmc_clk_ids, childnp); if (!clk_id) continue; clk_setup = clk_id->data; clk_setup(childnp, pmc); }
static void __init of_at91sam9x5_sckc_setup(struct device_node *np) { struct device_node *childnp; void (*clk_setup)(struct device_node *, void __iomem *); const struct of_device_id *clk_id; void __iomem *regbase = of_iomap(np, 0); if (!regbase) return; for_each_child_of_node(np, childnp) { clk_id = of_match_node(sckc_clk_ids, childnp); if (!clk_id) continue; clk_setup = clk_id->data; clk_setup(childnp, regbase); }