mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
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:
@@ -327,6 +327,56 @@ void led_classdev_flash_unregister(struct led_classdev_flash *fled_cdev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(led_classdev_flash_unregister);
|
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)
|
static void led_clamp_align(struct led_flash_setting *s)
|
||||||
{
|
{
|
||||||
u32 v, offset;
|
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);
|
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
|
* led_set_flash_strobe - setup flash strobe
|
||||||
* @fled_cdev: the flash LED to set strobe on
|
* @fled_cdev: the flash LED to set strobe on
|
||||||
|
Reference in New Issue
Block a user