ACK: [SRU][focal:linux-bluefield][PATCH 1/1] gpiolib: acpi: Allow to find GpioInt() resource by name and index

Kleber Souza kleber.souza at canonical.com
Tue Apr 19 13:10:33 UTC 2022


On 18.04.22 20:24, Zachary Tahenakos wrote:
> From: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
> 
> https://bugs.launchpad.net/bugs/1969374
> 
> Currently only search by index is supported. However, in some cases
> we might need to pass the quirks to the acpi_dev_gpio_irq_get().
> 
> For this, split out acpi_dev_gpio_irq_get_by() and replace
> acpi_dev_gpio_irq_get() by calling above with NULL for name parameter.
> 
> 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 <andriy.shevchenko at linux.intel.com>
> Acked-by: Mika Westerberg <mika.westerberg at linux.intel.com>
> Acked-by: Linus Walleij <linus.walleij at linaro.org>
> (cherry-picked from commit 809390219fb9c2421239afe5c9eb862d73978ba0)
> Signed-off-by: Zachary Tahenakos <zachary.tahenakos at canonical.com>

Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>

Thanks

> ---
>   drivers/gpio/gpiolib-acpi.c | 12 ++++++++----
>   include/linux/acpi.h        | 10 ++++++++--
>   2 files changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
> index 13c6eee481da..260237881e69 100644
> --- a/drivers/gpio/gpiolib-acpi.c
> +++ b/drivers/gpio/gpiolib-acpi.c
> @@ -904,8 +904,9 @@ struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,
>   }
>   
>   /**
> - * acpi_dev_gpio_irq_get() - Find GpioInt and translate it to Linux IRQ number
> + * acpi_dev_gpio_irq_get_by() - Find GpioInt and translate it to Linux IRQ number
>    * @adev: pointer to a ACPI device to get IRQ from
> + * @name: optional name of GpioInt resource
>    * @index: index of GpioInt resource (starting from %0)
>    *
>    * If the device has one or more GpioInt resources, this function can be
> @@ -915,9 +916,12 @@ struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,
>    * The function is idempotent, though each time it runs it will configure GPIO
>    * pin direction according to the flags in GpioInt resource.
>    *
> + * The function takes optional @name parameter. If the resource has a property
> + * name, then only those will be taken into account.
> + *
>    * Return: Linux IRQ number (> %0) on success, negative errno on failure.
>    */
> -int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
> +int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *name, int index)
>   {
>   	int idx, i;
>   	unsigned int irq_flags;
> @@ -927,7 +931,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
>   		struct acpi_gpio_info info;
>   		struct gpio_desc *desc;
>   
> -		desc = acpi_get_gpiod_by_index(adev, NULL, i, &info);
> +		desc = acpi_get_gpiod_by_index(adev, name, i, &info);
>   
>   		/* Ignore -EPROBE_DEFER, it only matters if idx matches */
>   		if (IS_ERR(desc) && PTR_ERR(desc) != -EPROBE_DEFER)
> @@ -971,7 +975,7 @@ int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
>   	}
>   	return -ENOENT;
>   }
> -EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get);
> +EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_get_by);
>   
>   static acpi_status
>   acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index c708fd831565..2d701573d51c 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -1026,19 +1026,25 @@ void __acpi_handle_debug(struct _ddebug *descriptor, acpi_handle handle, const c
>   #if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB)
>   bool acpi_gpio_get_irq_resource(struct acpi_resource *ares,
>   				struct acpi_resource_gpio **agpio);
> -int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index);
> +int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *name, int index);
>   #else
>   static inline bool acpi_gpio_get_irq_resource(struct acpi_resource *ares,
>   					      struct acpi_resource_gpio **agpio)
>   {
>   	return false;
>   }
> -static inline int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
> +static inline int acpi_dev_gpio_irq_get_by(struct acpi_device *adev,
> +					   const char *name, int index)
>   {
>   	return -ENXIO;
>   }
>   #endif
>   
> +static inline int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
> +{
> +	return acpi_dev_gpio_irq_get_by(adev, NULL, index);
> +}
> +
>   /* Device properties */
>   
>   #ifdef CONFIG_ACPI




More information about the kernel-team mailing list