Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 789fe8a3 authored by Thierry Reding's avatar Thierry Reding Committed by Lina Iyer
Browse files

gpio: Add support for hierarchical IRQ domains

Hierarchical IRQ domains can be used to stack different IRQ controllers
on top of each other. One specific use-case where this can be useful is
if a power management controller has top-level controls for wakeup
interrupts. In such cases, the power management controller can be a
parent to other interrupt controllers and program additional registers
when an IRQ has its wake capability enabled or disabled.

Change-Id: I3f63cb13c0cd1b602d3205c40648d5e7d3c62d4d
Patch-mainline: https://lore.kernel.org/patchwork/patch/989528/


Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Signed-off-by: default avatarLina Iyer <ilina@codeaurora.org>
parent b058dd78
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -1883,7 +1883,9 @@ static int gpiochip_add_irqchip(struct gpio_chip *gpiochip,
		type = IRQ_TYPE_NONE;
	}

	if (!gpiochip->to_irq)
		gpiochip->to_irq = gpiochip_to_irq;

	gpiochip->irq.default_type = type;
	gpiochip->irq.lock_key = lock_key;
	gpiochip->irq.request_key = request_key;
@@ -1893,6 +1895,11 @@ static int gpiochip_add_irqchip(struct gpio_chip *gpiochip,
	else
		ops = &gpiochip_domain_ops;

	if (gpiochip->irq.parent_domain)
		gpiochip->irq.domain = irq_domain_add_hierarchy(gpiochip->irq.parent_domain,
								0, gpiochip->ngpio,
								np, ops, gpiochip);
	else
		gpiochip->irq.domain = irq_domain_add_simple(np, gpiochip->ngpio,
							     gpiochip->irq.first,
							     ops, gpiochip);
+6 −0
Original line number Diff line number Diff line
@@ -47,6 +47,12 @@ struct gpio_irq_chip {
	 */
	const struct irq_domain_ops *domain_ops;

	/**
	 * @parent_domain:
	 *
	 */
	struct irq_domain *parent_domain;

	/**
	 * @handler:
	 *