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

Commit 67bf5156 authored by David Arcari's avatar David Arcari Committed by Linus Walleij
Browse files

gpio / ACPI: fix returned error from acpi_dev_gpio_irq_get()



acpi_dev_gpio_irq_get() currently ignores the error returned
by acpi_get_gpiod_by_index() and overwrites it with -ENOENT.

Problem is this error can be -EPROBE_DEFER, which just blows
up some drivers when the module ordering is not correct.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarDavid Arcari <darcari@redhat.com>
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 0cb94092
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -653,14 +653,17 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
{
{
	int idx, i;
	int idx, i;
	unsigned int irq_flags;
	unsigned int irq_flags;
	int ret = -ENOENT;


	for (i = 0, idx = 0; idx <= index; i++) {
	for (i = 0, idx = 0; idx <= index; i++) {
		struct acpi_gpio_info info;
		struct acpi_gpio_info info;
		struct gpio_desc *desc;
		struct gpio_desc *desc;


		desc = acpi_get_gpiod_by_index(adev, NULL, i, &info);
		desc = acpi_get_gpiod_by_index(adev, NULL, i, &info);
		if (IS_ERR(desc))
		if (IS_ERR(desc)) {
			ret = PTR_ERR(desc);
			break;
			break;
		}
		if (info.gpioint && idx++ == index) {
		if (info.gpioint && idx++ == index) {
			int irq = gpiod_to_irq(desc);
			int irq = gpiod_to_irq(desc);


@@ -679,7 +682,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
		}
		}


	}
	}
	return -ENOENT;
	return ret;
}
}
EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get);
EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get);