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

Commit 25e4fe92 authored by Dmitry Eremin-Solenikov's avatar Dmitry Eremin-Solenikov Committed by Linus Walleij
Browse files

gpiolib: cleanup chained handler and data



Clean up chained handler and handler data if they were set by
gpiochip_set_chained_irqchip().

Signed-off-by: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 845c8770
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -443,6 +443,8 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
		 */
		irq_set_handler_data(parent_irq, gpiochip);
		irq_set_chained_handler(parent_irq, parent_handler);

		gpiochip->irq_parent = parent_irq;
	}

	/* Set the parent IRQ for all affected IRQs */
@@ -551,6 +553,11 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)

	acpi_gpiochip_free_interrupts(gpiochip);

	if (gpiochip->irq_parent) {
		irq_set_chained_handler(gpiochip->irq_parent, NULL);
		irq_set_handler_data(gpiochip->irq_parent, NULL);
	}

	/* Remove all IRQ mappings and delete the domain */
	if (gpiochip->irqdomain) {
		for (offset = 0; offset < gpiochip->ngpio; offset++)
+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ struct gpio_chip {
	unsigned int		irq_base;
	irq_flow_handler_t	irq_handler;
	unsigned int		irq_default_type;
	int			irq_parent;
#endif

#if defined(CONFIG_OF_GPIO)