gpiolib: acpi: Introduce NO_RESTRICTION quirk
Allow to relax IoRestriction for certain cases. One of the use case is incorrectly cooked ACPI table where interrupt pin is defined with GpioIo() macro with IoRestrictionOutputOnly. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
ce0929d222
commit
1b2ca32ab0
|
@ -496,11 +496,18 @@ int
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -978,6 +978,10 @@ struct acpi_gpio_mapping {
|
|||
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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue