Skip to content

Commit

Permalink
leds: flash: Add devm_* functions to the flash class
Browse files Browse the repository at this point in the history
Add the missing device managed API for registration and
unregistration for the LED flash class.

Signed-off-by: Dan Murphy <[email protected]>
Signed-off-by: Pavel Machek <[email protected]>
  • Loading branch information
Dan Murphy authored and pavelmachek committed Nov 3, 2019
1 parent 57e5c31 commit 20cdba9
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
50 changes: 50 additions & 0 deletions drivers/leds/led-class-flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,56 @@ void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev)
}
EXPORT_SYMBOL_GPL(led_classdev_flash_unregister);

static void devm_led_classdev_flash_release(struct device *dev, void *res)
{
led_classdev_flash_unregister(*(struct led_classdev_flash **)res);
}

int devm_led_classdev_flash_register_ext(struct device *parent,
struct led_classdev_flash *fled_cdev,
struct led_init_data *init_data)
{
struct led_classdev_flash **dr;
int ret;

dr = devres_alloc(devm_led_classdev_flash_release, sizeof(*dr),
GFP_KERNEL);
if (!dr)
return -ENOMEM;

ret = led_classdev_flash_register_ext(parent, fled_cdev, init_data);
if (ret) {
devres_free(dr);
return ret;
}

*dr = fled_cdev;
devres_add(parent, dr);

return 0;
}
EXPORT_SYMBOL_GPL(devm_led_classdev_flash_register_ext);

static int devm_led_classdev_flash_match(struct device *dev,
void *res, void *data)
{
struct led_classdev_flash **p = res;

if (WARN_ON(!p || !*p))
return 0;

return *p == data;
}

void devm_led_classdev_flash_unregister(struct device *dev,
struct led_classdev_flash *fled_cdev)
{
WARN_ON(devres_release(dev,
devm_led_classdev_flash_release,
devm_led_classdev_flash_match, fled_cdev));
}
EXPORT_SYMBOL_GPL(devm_led_classdev_flash_unregister);

static void led_clamp_align(struct led_flash_setting *s)
{
u32 v, offset;
Expand Down
14 changes: 14 additions & 0 deletions include/linux/led-class-flash.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,20 @@ static inline int led_classdev_flash_register(struct device *parent,
*/
void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev);

int devm_led_classdev_flash_register_ext(struct device *parent,
struct led_classdev_flash *fled_cdev,
struct led_init_data *init_data);


static inline int devm_led_classdev_flash_register(struct device *parent,
struct led_classdev_flash *fled_cdev)
{
return devm_led_classdev_flash_register_ext(parent, fled_cdev, NULL);
}

void devm_led_classdev_flash_unregister(struct device *parent,
struct led_classdev_flash *fled_cdev);

/**
* led_set_flash_strobe - setup flash strobe
* @fled_cdev: the flash LED to set strobe on
Expand Down

0 comments on commit 20cdba9

Please sign in to comment.