forked from Minki/linux
leds: flash: Add devm_* functions to the flash class
Add the missing device managed API for registration and unregistration for the LED flash class. Signed-off-by: Dan Murphy <dmurphy@ti.com> Signed-off-by: Pavel Machek <pavel@ucw.cz>
This commit is contained in:
parent
57e5c31e53
commit
20cdba9d9c
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user