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