gpiolib: acpi: Add ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER quirk
Subsystems (2)
PATCH 1/1 gpiolib: acpi: Add ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER quirk
[ Upstream commit 62d5247d239d4b48762192a251c647d7c997616a ]
On some systems the ACPI tables has wrong pin number and instead of having a relative one it provides an absolute one in the global GPIO number space.
Add ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER quirk to cope with such cases.
Fixes ba8c90c61847 ("gpio: pca953x: Override IRQ for one of the expanders on Galileo Gen 2")
Depends-on: 0ea683931adb ("gpio: dwapb: Convert driver to using the GPIO-lib-based IRQ-chip")
Signed-off-by Andy Shevchenko <[email protected]>
Acked-by Mika Westerberg <[email protected]>
Acked-by Linus Walleij <[email protected]>
--- drivers/gpio/gpiolib-acpi.c | 7 ++++++- include/linux/gpio/consumer.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-)
drivers/gpio/gpiolib-acpi.c +6 -1
@@ -649,6 +649,7 @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)if (!lookup->desc) {const struct acpi_resource_gpio *agpio = &ares->data.gpio;bool gpioint = agpio->connection_type ==ACPI_RESOURCE_GPIO_TYPE_INT ; +struct gpio_desc *desc;int pin_index;if (lookup->info.quirks &ACPI_GPIO_QUIRK_ONLY_GPIOIO && gpioint)
@@ -661,8 +662,12 @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)if (pin_index >= agpio->pin_table_length)return 1 ; - lookup->desc =acpi_get_gpiod (agpio->resource_source.string_ptr, +if (lookup->info.quirks &ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER ) + desc =gpio_to_desc (agpio->pin_table[pin_index]); +else + desc =acpi_get_gpiod (agpio->resource_source.string_ptr, agpio->pin_table[pin_index]); + lookup->desc = desc; lookup->info.pin_config = agpio->pin_config; lookup->info.gpioint = gpioint;
include/linux/gpio/consumer.h +2 -0
@@ -674,6 +674,8 @@ struct acpi_gpio_mapping {* get GpioIo type explicitly, this quirk may be used. */ #define ACPI_GPIO_QUIRK_ONLY_GPIOIO BIT(1) +/* Use given pin as an absolute GPIO number in the system */ +#define ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER BIT(2)unsigned int quirks; };
Signature · 1 line
2.30.1