From: Bartosz Golaszewski <bgolaszew...@baylibre.com>

If all we want to manage is a single pointer, there's no need to
manually allocate and add a new devres. We can simply use
devm_add_action_or_reset() and shrink the code by a good bit.

Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com>
---
 drivers/gpio/gpiolib-devres.c | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/drivers/gpio/gpiolib-devres.c b/drivers/gpio/gpiolib-devres.c
index 7dbce4c4ebdf..0a292dd3e2a6 100644
--- a/drivers/gpio/gpiolib-devres.c
+++ b/drivers/gpio/gpiolib-devres.c
@@ -479,9 +479,9 @@ void devm_gpio_free(struct device *dev, unsigned int gpio)
 }
 EXPORT_SYMBOL_GPL(devm_gpio_free);
 
-static void devm_gpio_chip_release(struct device *dev, void *res)
+static void devm_gpio_chip_release(void *data)
 {
-       struct gpio_chip *gc = *(struct gpio_chip **)res;
+       struct gpio_chip *gc = data;
 
        gpiochip_remove(gc);
 }
@@ -507,23 +507,12 @@ int devm_gpiochip_add_data_with_key(struct device *dev, 
struct gpio_chip *gc, vo
                                    struct lock_class_key *lock_key,
                                    struct lock_class_key *request_key)
 {
-       struct gpio_chip **ptr;
        int ret;
 
-       ptr = devres_alloc(devm_gpio_chip_release, sizeof(*ptr),
-                            GFP_KERNEL);
-       if (!ptr)
-               return -ENOMEM;
-
        ret = gpiochip_add_data_with_key(gc, data, lock_key, request_key);
-       if (ret < 0) {
-               devres_free(ptr);
+       if (ret < 0)
                return ret;
-       }
 
-       *ptr = gc;
-       devres_add(dev, ptr);
-
-       return 0;
+       return devm_add_action_or_reset(dev, devm_gpio_chip_release, gc);
 }
 EXPORT_SYMBOL_GPL(devm_gpiochip_add_data_with_key);
-- 
2.29.1

Reply via email to