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 | ||