return desc;
 }
 
-static struct gpio_desc *acpi_find_gpio(struct device *dev, const char *con_id,
+static struct gpio_desc *acpi_find_gpio(struct device *dev,
+                                       const char *con_id,
                                        unsigned int idx,
-                                       enum gpio_lookup_flags *flags)
+                                       enum gpiod_flags flags,
+                                       enum gpio_lookup_flags *lookupflags)
 {
        struct acpi_device *adev = ACPI_COMPANION(dev);
        struct acpi_gpio_info info;
                desc = acpi_get_gpiod_by_index(adev, NULL, idx, &info);
                if (IS_ERR(desc))
                        return desc;
+
+               if ((flags == GPIOD_OUT_LOW || flags == GPIOD_OUT_HIGH) &&
+                   info.gpioint) {
+                       dev_dbg(dev, "refusing GpioInt() entry when doing GPIOD_OUT_* lookup\n");
+                       return ERR_PTR(-ENOENT);
+               }
        }
 
        if (info.polarity == GPIO_ACTIVE_LOW)
-               *flags |= GPIO_ACTIVE_LOW;
+               *lookupflags |= GPIO_ACTIVE_LOW;
 
        return desc;
 }
                        desc = of_find_gpio(dev, con_id, idx, &lookupflags);
                } else if (ACPI_COMPANION(dev)) {
                        dev_dbg(dev, "using ACPI for GPIO lookup\n");
-                       desc = acpi_find_gpio(dev, con_id, idx, &lookupflags);
+                       desc = acpi_find_gpio(dev, con_id, idx, flags, &lookupflags);
                }
        }