Lines Matching full:tcu
3 * JZ47xx SoCs TCU IRQ driver
11 #include <linux/mfd/ingenic-tcu.h>
93 struct ingenic_tcu *tcu; in ingenic_tcu_irq_init() local
102 tcu = kzalloc(sizeof(*tcu), GFP_KERNEL); in ingenic_tcu_irq_init()
103 if (!tcu) in ingenic_tcu_irq_init()
106 tcu->map = map; in ingenic_tcu_irq_init()
109 if (irqs < 0 || irqs > ARRAY_SIZE(tcu->parent_irqs)) { in ingenic_tcu_irq_init()
115 tcu->nb_parent_irqs = irqs; in ingenic_tcu_irq_init()
117 tcu->domain = irq_domain_add_linear(np, 32, &irq_generic_chip_ops, in ingenic_tcu_irq_init()
119 if (!tcu->domain) { in ingenic_tcu_irq_init()
124 ret = irq_alloc_domain_generic_chips(tcu->domain, 32, 1, "TCU", in ingenic_tcu_irq_init()
132 gc = irq_get_domain_generic_chip(tcu->domain, 0); in ingenic_tcu_irq_init()
136 gc->private = tcu->map; in ingenic_tcu_irq_init()
147 regmap_write(tcu->map, TCU_REG_TMSR, IRQ_MSK(32)); in ingenic_tcu_irq_init()
160 tcu->parent_irqs[i] = irq_of_parse_and_map(np, i); in ingenic_tcu_irq_init()
161 if (!tcu->parent_irqs[i]) { in ingenic_tcu_irq_init()
166 irq_set_chained_handler_and_data(tcu->parent_irqs[i], in ingenic_tcu_irq_init()
168 tcu->domain); in ingenic_tcu_irq_init()
175 irq_dispose_mapping(tcu->parent_irqs[i - 1]); in ingenic_tcu_irq_init()
177 irq_domain_remove(tcu->domain); in ingenic_tcu_irq_init()
179 kfree(tcu); in ingenic_tcu_irq_init()
182 IRQCHIP_DECLARE(jz4740_tcu_irq, "ingenic,jz4740-tcu", ingenic_tcu_irq_init);
183 IRQCHIP_DECLARE(jz4725b_tcu_irq, "ingenic,jz4725b-tcu", ingenic_tcu_irq_init);
184 IRQCHIP_DECLARE(jz4760_tcu_irq, "ingenic,jz4760-tcu", ingenic_tcu_irq_init);
185 IRQCHIP_DECLARE(jz4770_tcu_irq, "ingenic,jz4770-tcu", ingenic_tcu_irq_init);
186 IRQCHIP_DECLARE(x1000_tcu_irq, "ingenic,x1000-tcu", ingenic_tcu_irq_init);