static int __init irqcrossbar_init(struct device_node *node, struct device_node *parent) { struct irq_domain *parent_domain, *domain; int err; if (!parent) { pr_err("%pOF: no parent, giving up\n", node); return -ENODEV; } parent_domain = irq_find_host(parent); if (!parent_domain) { pr_err("%pOF: unable to obtain parent domain\n", node); return -ENXIO; } err = crossbar_of_init(node); if (err) return err; domain = irq_domain_add_hierarchy(parent_domain, 0, cb->max_crossbar_sources, node, &crossbar_domain_ops, NULL); if (!domain) { pr_err("%pOF: failed to allocated domain\n", node); return -ENOMEM; } return 0; }
int __init irqcrossbar_init(void) { struct device_node *np; np = of_find_matching_node(NULL, crossbar_match); if (!np) return -ENODEV; crossbar_of_init(np); return 0; }