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

Commit 3bb97b7d authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Greg Kroah-Hartman
Browse files

gpio: dwapb: Call acpi_gpiochip_free_interrupts() on GPIO chip de-registration



[ Upstream commit 494a94e38dcf62543a32a4424d646ff80b4b28bd ]

Add missed acpi_gpiochip_free_interrupts() call when unregistering ports.

While at it, drop extra check to call acpi_gpiochip_request_interrupts().
There is no need to have an additional check to call
acpi_gpiochip_request_interrupts(). Even without any interrupts available
the registered ACPI Event handlers can be useful for debugging purposes.

Fixes: e6cb3486 ("gpio: dwapb: add gpio-signaled acpi event support")
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Acked-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/r/20200519131233.59032-1-andriy.shevchenko@linux.intel.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 1bcf9749
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -535,26 +535,33 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
		dwapb_configure_irqs(gpio, port, pp);

	err = gpiochip_add_data(&port->gc, port);
	if (err)
	if (err) {
		dev_err(gpio->dev, "failed to register gpiochip for port%d\n",
			port->idx);
	else
		port->is_registered = true;
		return err;
	}

	/* Add GPIO-signaled ACPI event support */
	if (pp->has_irq)
	acpi_gpiochip_request_interrupts(&port->gc);

	return err;
	port->is_registered = true;

	return 0;
}

static void dwapb_gpio_unregister(struct dwapb_gpio *gpio)
{
	unsigned int m;

	for (m = 0; m < gpio->nr_ports; ++m)
		if (gpio->ports[m].is_registered)
			gpiochip_remove(&gpio->ports[m].gc);
	for (m = 0; m < gpio->nr_ports; ++m) {
		struct dwapb_gpio_port *port = &gpio->ports[m];

		if (!port->is_registered)
			continue;

		acpi_gpiochip_free_interrupts(&port->gc);
		gpiochip_remove(&port->gc);
	}
}

static struct dwapb_platform_data *