diff options
| -rw-r--r-- | drivers/leds/trigger/ledtrig-timer.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/leds/trigger/ledtrig-timer.c b/drivers/leds/trigger/ledtrig-timer.c index 7c14983781ee..ca898c1383be 100644 --- a/drivers/leds/trigger/ledtrig-timer.c +++ b/drivers/leds/trigger/ledtrig-timer.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | #include <linux/ctype.h> | 17 | #include <linux/ctype.h> |
| 18 | #include <linux/slab.h> | ||
| 18 | #include <linux/leds.h> | 19 | #include <linux/leds.h> |
| 19 | 20 | ||
| 20 | static ssize_t led_delay_on_show(struct device *dev, | 21 | static ssize_t led_delay_on_show(struct device *dev, |
| @@ -77,8 +78,41 @@ static struct attribute *timer_trig_attrs[] = { | |||
| 77 | }; | 78 | }; |
| 78 | ATTRIBUTE_GROUPS(timer_trig); | 79 | ATTRIBUTE_GROUPS(timer_trig); |
| 79 | 80 | ||
| 81 | static void pattern_init(struct led_classdev *led_cdev) | ||
| 82 | { | ||
| 83 | u32 *pattern; | ||
| 84 | unsigned int size = 0; | ||
| 85 | |||
| 86 | pattern = led_get_default_pattern(led_cdev, &size); | ||
| 87 | if (!pattern) | ||
| 88 | return; | ||
| 89 | |||
| 90 | if (size != 2) { | ||
| 91 | dev_warn(led_cdev->dev, | ||
| 92 | "Expected 2 but got %u values for delays pattern\n", | ||
| 93 | size); | ||
| 94 | goto out; | ||
| 95 | } | ||
| 96 | |||
| 97 | led_cdev->blink_delay_on = pattern[0]; | ||
| 98 | led_cdev->blink_delay_off = pattern[1]; | ||
| 99 | /* led_blink_set() called by caller */ | ||
| 100 | |||
| 101 | out: | ||
| 102 | kfree(pattern); | ||
| 103 | } | ||
| 104 | |||
| 80 | static int timer_trig_activate(struct led_classdev *led_cdev) | 105 | static int timer_trig_activate(struct led_classdev *led_cdev) |
| 81 | { | 106 | { |
| 107 | if (led_cdev->flags & LED_INIT_DEFAULT_TRIGGER) { | ||
| 108 | pattern_init(led_cdev); | ||
| 109 | /* | ||
| 110 | * Mark as initialized even on pattern_init() error because | ||
| 111 | * any consecutive call to it would produce the same error. | ||
| 112 | */ | ||
| 113 | led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER; | ||
| 114 | } | ||
| 115 | |||
| 82 | led_blink_set(led_cdev, &led_cdev->blink_delay_on, | 116 | led_blink_set(led_cdev, &led_cdev->blink_delay_on, |
| 83 | &led_cdev->blink_delay_off); | 117 | &led_cdev->blink_delay_off); |
| 84 | 118 | ||
