leds: flash: Add support for flash/strobe duration

Add support for the new V4L2_CID_FLASH_DURATION control to the LEDs
driver.

Signed-off-by: Richard Leitner <richard.leitner@linux.dev>
Link: https://lore.kernel.org/r/20250507-ov9282-flash-strobe-v4-2-72b299c1b7c9@linux.dev
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Richard Leitner 2025-05-07 09:51:31 +02:00 committed by Lee Jones
parent f1c86ab986
commit 6a09ae8281
2 changed files with 31 additions and 0 deletions

View File

@ -440,6 +440,21 @@ int led_update_flash_brightness(struct led_classdev_flash *fled_cdev)
}
EXPORT_SYMBOL_GPL(led_update_flash_brightness);
int led_set_flash_duration(struct led_classdev_flash *fled_cdev, u32 duration)
{
struct led_classdev *led_cdev = &fled_cdev->led_cdev;
struct led_flash_setting *s = &fled_cdev->duration;
s->val = duration;
led_clamp_align(s);
if (!(led_cdev->flags & LED_SUSPENDED))
return call_flash_op(fled_cdev, duration_set, s->val);
return 0;
}
EXPORT_SYMBOL_GPL(led_set_flash_duration);
MODULE_AUTHOR("Jacek Anaszewski <j.anaszewski@samsung.com>");
MODULE_DESCRIPTION("LED Flash class interface");
MODULE_LICENSE("GPL v2");

View File

@ -45,6 +45,8 @@ struct led_flash_ops {
int (*timeout_set)(struct led_classdev_flash *fled_cdev, u32 timeout);
/* get the flash LED fault */
int (*fault_get)(struct led_classdev_flash *fled_cdev, u32 *fault);
/* set flash duration */
int (*duration_set)(struct led_classdev_flash *fled_cdev, u32 duration);
};
/*
@ -75,6 +77,9 @@ struct led_classdev_flash {
/* flash timeout value in microseconds along with its constraints */
struct led_flash_setting timeout;
/* flash timeout value in microseconds along with its constraints */
struct led_flash_setting duration;
/* LED Flash class sysfs groups */
const struct attribute_group *sysfs_groups[LED_FLASH_SYSFS_GROUPS_SIZE];
};
@ -209,4 +214,15 @@ int led_set_flash_timeout(struct led_classdev_flash *fled_cdev, u32 timeout);
*/
int led_get_flash_fault(struct led_classdev_flash *fled_cdev, u32 *fault);
/**
* led_set_flash_duration - set flash LED duration
* @fled_cdev: the flash LED to set
* @timeout: the flash duration to set it to
*
* Set the flash strobe duration.
*
* Returns: 0 on success or negative error value on failure
*/
int led_set_flash_duration(struct led_classdev_flash *fled_cdev, u32 duration);
#endif /* __LINUX_FLASH_LEDS_H_INCLUDED */