Skip to content

Commit 6a09ae8

Browse files
g0hl1nlag-linaro
authored andcommitted
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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Lee Jones <[email protected]>
1 parent f1c86ab commit 6a09ae8

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

drivers/leds/led-class-flash.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,21 @@ int led_update_flash_brightness(struct led_classdev_flash *fled_cdev)
440440
}
441441
EXPORT_SYMBOL_GPL(led_update_flash_brightness);
442442

443+
int led_set_flash_duration(struct led_classdev_flash *fled_cdev, u32 duration)
444+
{
445+
struct led_classdev *led_cdev = &fled_cdev->led_cdev;
446+
struct led_flash_setting *s = &fled_cdev->duration;
447+
448+
s->val = duration;
449+
led_clamp_align(s);
450+
451+
if (!(led_cdev->flags & LED_SUSPENDED))
452+
return call_flash_op(fled_cdev, duration_set, s->val);
453+
454+
return 0;
455+
}
456+
EXPORT_SYMBOL_GPL(led_set_flash_duration);
457+
443458
MODULE_AUTHOR("Jacek Anaszewski <[email protected]>");
444459
MODULE_DESCRIPTION("LED Flash class interface");
445460
MODULE_LICENSE("GPL v2");

include/linux/led-class-flash.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ struct led_flash_ops {
4545
int (*timeout_set)(struct led_classdev_flash *fled_cdev, u32 timeout);
4646
/* get the flash LED fault */
4747
int (*fault_get)(struct led_classdev_flash *fled_cdev, u32 *fault);
48+
/* set flash duration */
49+
int (*duration_set)(struct led_classdev_flash *fled_cdev, u32 duration);
4850
};
4951

5052
/*
@@ -75,6 +77,9 @@ struct led_classdev_flash {
7577
/* flash timeout value in microseconds along with its constraints */
7678
struct led_flash_setting timeout;
7779

80+
/* flash timeout value in microseconds along with its constraints */
81+
struct led_flash_setting duration;
82+
7883
/* LED Flash class sysfs groups */
7984
const struct attribute_group *sysfs_groups[LED_FLASH_SYSFS_GROUPS_SIZE];
8085
};
@@ -209,4 +214,15 @@ int led_set_flash_timeout(struct led_classdev_flash *fled_cdev, u32 timeout);
209214
*/
210215
int led_get_flash_fault(struct led_classdev_flash *fled_cdev, u32 *fault);
211216

217+
/**
218+
* led_set_flash_duration - set flash LED duration
219+
* @fled_cdev: the flash LED to set
220+
* @timeout: the flash duration to set it to
221+
*
222+
* Set the flash strobe duration.
223+
*
224+
* Returns: 0 on success or negative error value on failure
225+
*/
226+
int led_set_flash_duration(struct led_classdev_flash *fled_cdev, u32 duration);
227+
212228
#endif /* __LINUX_FLASH_LEDS_H_INCLUDED */

0 commit comments

Comments
 (0)