Lines Matching full:combiner
8 * An interrupt combiner in this block combines a set of interrupts by
13 * of the given combiner. Thus, each combiner can be described as a set
31 struct combiner { struct
49 struct combiner *combiner = irq_desc_get_handler_data(desc); in combiner_handle_irq() argument
55 for (reg = 0; reg < combiner->nregs; reg++) { in combiner_handle_irq()
60 bit = readl_relaxed(combiner->regs[reg].addr); in combiner_handle_irq()
61 status = bit & combiner->regs[reg].enabled; in combiner_handle_irq()
65 combiner->regs[reg].enabled, in combiner_handle_irq()
66 combiner->regs[reg].addr); in combiner_handle_irq()
72 generic_handle_domain_irq(combiner->domain, hwirq); in combiner_handle_irq()
81 struct combiner *combiner = irq_data_get_irq_chip_data(data); in combiner_irq_chip_mask_irq() local
82 struct combiner_reg *reg = combiner->regs + data->hwirq / REG_SIZE; in combiner_irq_chip_mask_irq()
89 struct combiner *combiner = irq_data_get_irq_chip_data(data); in combiner_irq_chip_unmask_irq() local
90 struct combiner_reg *reg = combiner->regs + data->hwirq / REG_SIZE; in combiner_irq_chip_unmask_irq()
98 .name = "qcom-irq-combiner"
118 struct combiner *combiner = d->host_data; in combiner_irq_translate() local
122 (fws->param[0] >= combiner->nirqs) || in combiner_irq_translate()
168 struct combiner *combiner; member
199 ctx->combiner->regs[ctx->combiner->nregs].addr = vaddr; in get_registers_cb()
200 ctx->combiner->nirqs += reg->bit_width; in get_registers_cb()
201 ctx->combiner->nregs++; in get_registers_cb()
205 static int get_registers(struct platform_device *pdev, struct combiner *comb) in get_registers()
215 ctx.combiner = comb; in get_registers()
227 struct combiner *combiner; in combiner_probe() local
237 combiner = devm_kzalloc(&pdev->dev, struct_size(combiner, regs, nregs), in combiner_probe()
239 if (!combiner) in combiner_probe()
242 err = get_registers(pdev, combiner); in combiner_probe()
246 combiner->parent_irq = platform_get_irq(pdev, 0); in combiner_probe()
247 if (combiner->parent_irq <= 0) in combiner_probe()
250 combiner->domain = irq_domain_create_linear(pdev->dev.fwnode, combiner->nirqs, in combiner_probe()
251 &domain_ops, combiner); in combiner_probe()
252 if (!combiner->domain) in combiner_probe()
256 irq_set_chained_handler_and_data(combiner->parent_irq, in combiner_probe()
257 combiner_handle_irq, combiner); in combiner_probe()
260 combiner->parent_irq, combiner->nirqs, combiner->regs[0].addr); in combiner_probe()
271 .name = "qcom-irq-combiner",