diff options
author | Hans de Goede <hdegoede@redhat.com> | 2023-01-20 12:45:16 +0100 |
---|---|---|
committer | Lee Jones <lee@kernel.org> | 2023-01-27 11:06:42 +0000 |
commit | 537bdca2a085f524b74ac2aa83822d081c585ca6 (patch) | |
tree | 0ca331e0943d2601b3f6f2f47c4328305675343f | |
parent | fafef58ef419f08bb761714a109870b617ac0bc0 (diff) | |
download | linux-stable-537bdca2a085f524b74ac2aa83822d081c585ca6.tar.gz linux-stable-537bdca2a085f524b74ac2aa83822d081c585ca6.tar.bz2 linux-stable-537bdca2a085f524b74ac2aa83822d081c585ca6.zip |
leds: led-class: Add __devm_led_get() helper
Add a __devm_led_get() helper which registers a passed in led_classdev
with devm for unregistration.
This is a preparation patch for adding a generic (non devicetree specific)
devm_led_get() function.
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230120114524.408368-4-hdegoede@redhat.com
-rw-r--r-- | drivers/leds/led-class.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 743d97b082dc..4904d140a560 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -274,6 +274,22 @@ static void devm_led_release(struct device *dev, void *res) led_put(*p); } +static struct led_classdev *__devm_led_get(struct device *dev, struct led_classdev *led) +{ + struct led_classdev **dr; + + dr = devres_alloc(devm_led_release, sizeof(struct led_classdev *), GFP_KERNEL); + if (!dr) { + led_put(led); + return ERR_PTR(-ENOMEM); + } + + *dr = led; + devres_add(dev, dr); + + return led; +} + /** * devm_of_led_get - Resource-managed request of a LED device * @dev: LED consumer @@ -289,7 +305,6 @@ struct led_classdev *__must_check devm_of_led_get(struct device *dev, int index) { struct led_classdev *led; - struct led_classdev **dr; if (!dev) return ERR_PTR(-EINVAL); @@ -298,17 +313,7 @@ struct led_classdev *__must_check devm_of_led_get(struct device *dev, if (IS_ERR(led)) return led; - dr = devres_alloc(devm_led_release, sizeof(struct led_classdev *), - GFP_KERNEL); - if (!dr) { - led_put(led); - return ERR_PTR(-ENOMEM); - } - - *dr = led; - devres_add(dev, dr); - - return led; + return __devm_led_get(dev, led); } EXPORT_SYMBOL_GPL(devm_of_led_get); |