forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/leds/trigger/ledtrig-oneshot.c
....@@ -1,13 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * One-shot LED Trigger
34 *
45 * Copyright 2012, Fabio Baltieri <fabio.baltieri@gmail.com>
56 *
67 * Based on ledtrig-timer.c by Richard Purdie <rpurdie@openedhand.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License version 2 as
10
- * published by the Free Software Foundation.
118 */
129
1310 #include <linux/module.h>
....@@ -130,6 +127,34 @@
130127 };
131128 ATTRIBUTE_GROUPS(oneshot_trig);
132129
130
+static void pattern_init(struct led_classdev *led_cdev)
131
+{
132
+ u32 *pattern;
133
+ unsigned int size = 0;
134
+
135
+ pattern = led_get_default_pattern(led_cdev, &size);
136
+ if (!pattern)
137
+ goto out_default;
138
+
139
+ if (size != 2) {
140
+ dev_warn(led_cdev->dev,
141
+ "Expected 2 but got %u values for delays pattern\n",
142
+ size);
143
+ goto out_default;
144
+ }
145
+
146
+ led_cdev->blink_delay_on = pattern[0];
147
+ led_cdev->blink_delay_off = pattern[1];
148
+ kfree(pattern);
149
+
150
+ return;
151
+
152
+out_default:
153
+ kfree(pattern);
154
+ led_cdev->blink_delay_on = DEFAULT_DELAY;
155
+ led_cdev->blink_delay_off = DEFAULT_DELAY;
156
+}
157
+
133158 static int oneshot_trig_activate(struct led_classdev *led_cdev)
134159 {
135160 struct oneshot_trig_data *oneshot_data;
....@@ -140,8 +165,14 @@
140165
141166 led_set_trigger_data(led_cdev, oneshot_data);
142167
143
- led_cdev->blink_delay_on = DEFAULT_DELAY;
144
- led_cdev->blink_delay_off = DEFAULT_DELAY;
168
+ if (led_cdev->flags & LED_INIT_DEFAULT_TRIGGER) {
169
+ pattern_init(led_cdev);
170
+ /*
171
+ * Mark as initialized even on pattern_init() error because
172
+ * any consecutive call to it would produce the same error.
173
+ */
174
+ led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER;
175
+ }
145176
146177 return 0;
147178 }