acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, struct acpi_gpio_info *info)
 {
        struct device *dev = &info->adev->dev;
+       enum gpiod_flags old = *flags;
        int ret;
 
-       ret = __acpi_gpio_update_gpiod_flags(flags, info->flags);
-       if (ret)
-               dev_dbg(dev, "Override GPIO initialization flags\n");
+       ret = __acpi_gpio_update_gpiod_flags(&old, info->flags);
+       if (info->quirks & ACPI_GPIO_QUIRK_NO_IO_RESTRICTION) {
+               if (ret)
+                       dev_warn(dev, FW_BUG "GPIO not in correct mode, fixing\n");
+       } else {
+               if (ret)
+                       dev_dbg(dev, "Override GPIO initialization flags\n");
+               *flags = old;
+       }
 
        return ret;
 }
 
        const char *name;
        const struct acpi_gpio_params *data;
        unsigned int size;
+
+/* Ignore IoRestriction field */
+#define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION      BIT(0)
+
        unsigned int quirks;
 };