lkml.org 
[lkml]   [2023]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 1/4] gpiolib: provide gpio_device_find_by_fwnode()
    Date
    One of the ways of looking up GPIO devices is using their fwnode.
    Provide a helper for that to avoid every user implementing their
    own matching function.

    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    ---
    drivers/gpio/gpiolib.c | 20 ++++++++++++++++++++
    include/linux/gpio/driver.h | 1 +
    2 files changed, 21 insertions(+)

    diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
    index 7b4d12b714a3..31c06a32cb8a 100644
    --- a/drivers/gpio/gpiolib.c
    +++ b/drivers/gpio/gpiolib.c
    @@ -1142,6 +1142,26 @@ struct gpio_device *gpio_device_find_by_label(const char *label)
    }
    EXPORT_SYMBOL_GPL(gpio_device_find_by_label);

    +static int gpio_chip_match_by_fwnode(struct gpio_chip *gc, void *fwnode)
    +{
    + return device_match_fwnode(&gc->gpiodev->dev, fwnode);
    +}
    +
    +/**
    + * gpio_device_find_by_fwnode() - wrapper around gpio_device_find() finding
    + * the GPIO device by its fwnode
    + * @fwnode: Firmware node to lookup
    + *
    + * Returns:
    + * Reference to the GPIO device or NULL. Reference must be released with
    + * gpio_device_put().
    + */
    +struct gpio_device *gpio_device_find_by_fwnode(const struct fwnode_handle *fwnode)
    +{
    + return gpio_device_find((void *)fwnode, gpio_chip_match_by_fwnode);
    +}
    +EXPORT_SYMBOL_GPL(gpio_device_find_by_fwnode);
    +
    /**
    * gpio_device_get() - Increase the reference count of this GPIO device
    * @gdev: GPIO device to increase the refcount for
    diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
    index f8ad7f40100c..ae4162d3f1d3 100644
    --- a/include/linux/gpio/driver.h
    +++ b/include/linux/gpio/driver.h
    @@ -611,6 +611,7 @@ struct gpio_chip *gpiochip_find(void *data,
    struct gpio_device *gpio_device_find(void *data,
    int (*match)(struct gpio_chip *gc, void *data));
    struct gpio_device *gpio_device_find_by_label(const char *label);
    +struct gpio_device *gpio_device_find_by_fwnode(const struct fwnode_handle *fwnode);

    struct gpio_device *gpio_device_get(struct gpio_device *gdev);
    void gpio_device_put(struct gpio_device *gdev);
    --
    2.40.0.1.gaa8946217a0b
    \
     
     \ /
      Last update: 2023-10-10 17:19    [W:4.590 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site