Message ID | 20210520140928.3252671-7-djrscally@gmail.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | Introduce intel_skl_int3472 module | expand |
On Thu, May 20, 2021 at 03:09:26PM +0100, Daniel Scally wrote: > Add a function to verify that a given acpi_resource represents an IO > type GPIO resource, and return it if so. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Signed-off-by: Daniel Scally <djrscally@gmail.com> > --- > Changes since v3: > - Patch introduced > > drivers/gpio/gpiolib-acpi.c | 23 +++++++++++++++++++++++ > include/linux/acpi.h | 7 +++++++ > 2 files changed, 30 insertions(+) > > diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c > index 684ddb35d83b..9887bb684575 100644 > --- a/drivers/gpio/gpiolib-acpi.c > +++ b/drivers/gpio/gpiolib-acpi.c > @@ -196,6 +196,29 @@ bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, > } > EXPORT_SYMBOL_GPL(acpi_gpio_get_irq_resource); > > +/** > + * acpi_gpio_get_io_resource - Fetch details of an ACPI resource if it is a GPIO > + * I/O resource or return False if not. > + * @ares: Pointer to the ACPI resource to fetch > + * @agpio: Pointer to a &struct acpi_resource_gpio to store the output pointer > + */ > +bool acpi_gpio_get_io_resource(struct acpi_resource *ares, > + struct acpi_resource_gpio **agpio) > +{ > + struct acpi_resource_gpio *gpio; > + > + if (ares->type != ACPI_RESOURCE_TYPE_GPIO) > + return false; > + > + gpio = &ares->data.gpio; > + if (gpio->connection_type != ACPI_RESOURCE_GPIO_TYPE_IO) > + return false; > + > + *agpio = gpio; > + return true; > +} > +EXPORT_SYMBOL_GPL(acpi_gpio_get_io_resource); > + > static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio, > struct acpi_gpio_event *event) > { > diff --git a/include/linux/acpi.h b/include/linux/acpi.h > index 170b9bebdb2b..e8ba7063c000 100644 > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -1098,6 +1098,8 @@ 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); > +bool acpi_gpio_get_io_resource(struct acpi_resource *ares, > + struct acpi_resource_gpio **agpio); > 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, > @@ -1105,6 +1107,11 @@ static inline bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, > { > return false; > } > +static inline bool acpi_gpio_get_io_resource(struct acpi_resource *ares, > + struct acpi_resource_gpio **agpio) > +{ > + return false; > +} > static inline int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, > const char *name, int index) > { > -- > 2.25.1 >
On 21/05/2021 13:05, Andy Shevchenko wrote: > On Thu, May 20, 2021 at 03:09:26PM +0100, Daniel Scally wrote: >> Add a function to verify that a given acpi_resource represents an IO >> type GPIO resource, and return it if so. > Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Thanks Andy, and same for 1/8
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c index 684ddb35d83b..9887bb684575 100644 --- a/drivers/gpio/gpiolib-acpi.c +++ b/drivers/gpio/gpiolib-acpi.c @@ -196,6 +196,29 @@ bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, } EXPORT_SYMBOL_GPL(acpi_gpio_get_irq_resource); +/** + * acpi_gpio_get_io_resource - Fetch details of an ACPI resource if it is a GPIO + * I/O resource or return False if not. + * @ares: Pointer to the ACPI resource to fetch + * @agpio: Pointer to a &struct acpi_resource_gpio to store the output pointer + */ +bool acpi_gpio_get_io_resource(struct acpi_resource *ares, + struct acpi_resource_gpio **agpio) +{ + struct acpi_resource_gpio *gpio; + + if (ares->type != ACPI_RESOURCE_TYPE_GPIO) + return false; + + gpio = &ares->data.gpio; + if (gpio->connection_type != ACPI_RESOURCE_GPIO_TYPE_IO) + return false; + + *agpio = gpio; + return true; +} +EXPORT_SYMBOL_GPL(acpi_gpio_get_io_resource); + static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio, struct acpi_gpio_event *event) { diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 170b9bebdb2b..e8ba7063c000 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -1098,6 +1098,8 @@ 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); +bool acpi_gpio_get_io_resource(struct acpi_resource *ares, + struct acpi_resource_gpio **agpio); 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, @@ -1105,6 +1107,11 @@ static inline bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, { return false; } +static inline bool acpi_gpio_get_io_resource(struct acpi_resource *ares, + struct acpi_resource_gpio **agpio) +{ + return false; +} static inline int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *name, int index) {
Add a function to verify that a given acpi_resource represents an IO type GPIO resource, and return it if so. Signed-off-by: Daniel Scally <djrscally@gmail.com> --- Changes since v3: - Patch introduced drivers/gpio/gpiolib-acpi.c | 23 +++++++++++++++++++++++ include/linux/acpi.h | 7 +++++++ 2 files changed, 30 insertions(+)