Commit 6a09ae82 authored by Richard Leitner's avatar Richard Leitner Committed by Lee Jones
Browse files

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: default avatarRichard Leitner <richard.leitner@linux.dev>
Link: https://lore.kernel.org/r/20250507-ov9282-flash-strobe-v4-2-72b299c1b7c9@linux.dev


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent f1c86ab9
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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");
+16 −0
Original line number Diff line number Diff line
@@ -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 */