Lines Matching defs:data

39 static void pattern_trig_update_patterns(struct pattern_trig_data *data)
41 data->curr = data->next;
42 if (!data->is_indefinite && data->curr == data->patterns)
43 data->repeat--;
45 if (data->next == data->patterns + data->npatterns - 1)
46 data->next = data->patterns;
48 data->next++;
50 data->delta_t = 0;
53 static int pattern_trig_compute_brightness(struct pattern_trig_data *data)
62 if (data->delta_t == 0 || data->curr->delta_t < UPDATE_INTERVAL)
63 return data->curr->brightness;
65 step_brightness = abs(data->next->brightness - data->curr->brightness);
66 step_brightness = data->delta_t * step_brightness / data->curr->delta_t;
68 if (data->next->brightness > data->curr->brightness)
69 return data->curr->brightness + step_brightness;
71 return data->curr->brightness - step_brightness;
76 struct pattern_trig_data *data = from_timer(data, t, timer);
79 if (!data->is_indefinite && !data->repeat)
82 if (data->curr->brightness == data->next->brightness) {
84 led_set_brightness(data->led_cdev,
85 data->curr->brightness);
86 mod_timer(&data->timer,
87 jiffies + msecs_to_jiffies(data->curr->delta_t));
88 if (!data->next->delta_t) {
90 pattern_trig_update_patterns(data);
93 pattern_trig_update_patterns(data);
102 if (data->delta_t > data->curr->delta_t) {
103 pattern_trig_update_patterns(data);
107 led_set_brightness(data->led_cdev,
108 pattern_trig_compute_brightness(data));
109 mod_timer(&data->timer,
113 data->delta_t += UPDATE_INTERVAL;
122 struct pattern_trig_data *data = led_cdev->trigger_data;
124 if (!data->npatterns)
127 if (data->is_hw_pattern) {
128 return led_cdev->pattern_set(led_cdev, data->patterns,
129 data->npatterns, data->repeat);
133 if (data->npatterns < 2)
136 data->delta_t = 0;
137 data->curr = data->patterns;
138 data->next = data->patterns + 1;
139 data->timer.expires = jiffies;
140 add_timer(&data->timer);
149 struct pattern_trig_data *data = led_cdev->trigger_data;
152 mutex_lock(&data->lock);
154 repeat = data->last_repeat;
156 mutex_unlock(&data->lock);
165 struct pattern_trig_data *data = led_cdev->trigger_data;
176 mutex_lock(&data->lock);
178 del_timer_sync(&data->timer);
180 if (data->is_hw_pattern)
183 data->last_repeat = data->repeat = res;
185 if (data->repeat == -1)
186 data->is_indefinite = true;
188 data->is_indefinite = false;
192 mutex_unlock(&data->lock);
198 static ssize_t pattern_trig_show_patterns(struct pattern_trig_data *data,
204 mutex_lock(&data->lock);
206 if (!data->npatterns || (data->is_hw_pattern ^ hw_pattern))
209 for (i = 0; i < data->npatterns; i++) {
212 data->patterns[i].brightness,
213 data->patterns[i].delta_t);
219 mutex_unlock(&data->lock);
223 static int pattern_trig_store_patterns_string(struct pattern_trig_data *data,
228 while (offset < count - 1 && data->npatterns < MAX_PATTERNS) {
231 &data->patterns[data->npatterns].brightness,
232 &data->patterns[data->npatterns].delta_t, &cr);
235 data->patterns[data->npatterns].brightness > data->led_cdev->max_brightness) {
236 data->npatterns = 0;
241 data->npatterns++;
247 static int pattern_trig_store_patterns_int(struct pattern_trig_data *data,
253 data->patterns[data->npatterns].brightness = buf[i];
254 data->patterns[data->npatterns].delta_t = buf[i + 1];
255 data->npatterns++;
265 struct pattern_trig_data *data = led_cdev->trigger_data;
268 mutex_lock(&data->lock);
270 del_timer_sync(&data->timer);
272 if (data->is_hw_pattern)
275 data->is_hw_pattern = hw_pattern;
276 data->npatterns = 0;
279 err = pattern_trig_store_patterns_string(data, buf, count);
281 err = pattern_trig_store_patterns_int(data, buf_int, count);
287 data->npatterns = 0;
290 mutex_unlock(&data->lock);
298 struct pattern_trig_data *data = led_cdev->trigger_data;
300 return pattern_trig_show_patterns(data, buf, false);
317 struct pattern_trig_data *data = led_cdev->trigger_data;
319 return pattern_trig_show_patterns(data, buf, true);
390 struct pattern_trig_data *data;
392 data = kzalloc(sizeof(*data), GFP_KERNEL);
393 if (!data)
403 data->is_indefinite = true;
404 data->last_repeat = -1;
405 mutex_init(&data->lock);
406 data->led_cdev = led_cdev;
407 led_set_trigger_data(led_cdev, data);
408 timer_setup(&data->timer, pattern_trig_timer_function, 0);
425 struct pattern_trig_data *data = led_cdev->trigger_data;
433 timer_shutdown_sync(&data->timer);
436 kfree(data);