Lines Matching refs:linedisp
43 struct linedisp *linedisp = timer_container_of(linedisp, t, timer); in linedisp_scroll() local
44 unsigned int i, ch = linedisp->scroll_pos; in linedisp_scroll()
45 unsigned int num_chars = linedisp->num_chars; in linedisp_scroll()
50 for (; i < num_chars && ch < linedisp->message_len; i++, ch++) in linedisp_scroll()
51 linedisp->buf[i] = linedisp->message[ch]; in linedisp_scroll()
58 linedisp->ops->update(linedisp); in linedisp_scroll()
61 linedisp->scroll_pos++; in linedisp_scroll()
62 linedisp->scroll_pos %= linedisp->message_len; in linedisp_scroll()
65 if (linedisp->message_len > num_chars && linedisp->scroll_rate) in linedisp_scroll()
66 mod_timer(&linedisp->timer, jiffies + linedisp->scroll_rate); in linedisp_scroll()
81 static int linedisp_display(struct linedisp *linedisp, const char *msg, in linedisp_display() argument
87 timer_delete_sync(&linedisp->timer); in linedisp_display()
98 kfree(linedisp->message); in linedisp_display()
99 linedisp->message = NULL; in linedisp_display()
100 linedisp->message_len = 0; in linedisp_display()
101 memset(linedisp->buf, ' ', linedisp->num_chars); in linedisp_display()
102 linedisp->ops->update(linedisp); in linedisp_display()
110 kfree(linedisp->message); in linedisp_display()
112 linedisp->message = new_msg; in linedisp_display()
113 linedisp->message_len = count; in linedisp_display()
114 linedisp->scroll_pos = 0; in linedisp_display()
117 linedisp_scroll(&linedisp->timer); in linedisp_display()
136 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in message_show() local
138 return sysfs_emit(buf, "%s\n", linedisp->message); in message_show()
155 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in message_store() local
158 err = linedisp_display(linedisp, buf, count); in message_store()
167 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in scroll_step_ms_show() local
169 return sysfs_emit(buf, "%u\n", jiffies_to_msecs(linedisp->scroll_rate)); in scroll_step_ms_show()
176 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in scroll_step_ms_store() local
184 linedisp->scroll_rate = msecs_to_jiffies(ms); in scroll_step_ms_store()
185 if (linedisp->message && linedisp->message_len > linedisp->num_chars) { in scroll_step_ms_store()
186 timer_delete_sync(&linedisp->timer); in scroll_step_ms_store()
187 if (linedisp->scroll_rate) in scroll_step_ms_store()
188 linedisp_scroll(&linedisp->timer); in scroll_step_ms_store()
198 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in map_seg_show() local
199 struct linedisp_map *map = linedisp->map; in map_seg_show()
208 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in map_seg_store() local
209 struct linedisp_map *map = linedisp->map; in map_seg_store()
235 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in linedisp_attr_is_visible() local
236 struct linedisp_map *map = linedisp->map; in linedisp_attr_is_visible()
260 __ATTRIBUTE_GROUPS(linedisp);
266 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in linedisp_release() local
268 kfree(linedisp->map); in linedisp_release()
269 kfree(linedisp->message); in linedisp_release()
270 kfree(linedisp->buf); in linedisp_release()
271 ida_free(&linedisp_id, linedisp->id); in linedisp_release()
279 static int linedisp_init_map(struct linedisp *linedisp) in linedisp_init_map() argument
284 if (!linedisp->ops->get_map_type) in linedisp_init_map()
287 err = linedisp->ops->get_map_type(linedisp); in linedisp_init_map()
312 linedisp->map = map; in linedisp_init_map()
332 int linedisp_register(struct linedisp *linedisp, struct device *parent, in linedisp_register() argument
337 memset(linedisp, 0, sizeof(*linedisp)); in linedisp_register()
338 linedisp->dev.parent = parent; in linedisp_register()
339 linedisp->dev.type = &linedisp_type; in linedisp_register()
340 linedisp->ops = ops; in linedisp_register()
341 linedisp->num_chars = num_chars; in linedisp_register()
342 linedisp->scroll_rate = DEFAULT_SCROLL_RATE; in linedisp_register()
347 linedisp->id = err; in linedisp_register()
349 device_initialize(&linedisp->dev); in linedisp_register()
350 dev_set_name(&linedisp->dev, "linedisp.%u", linedisp->id); in linedisp_register()
353 linedisp->buf = kzalloc(linedisp->num_chars, GFP_KERNEL); in linedisp_register()
354 if (!linedisp->buf) in linedisp_register()
358 err = linedisp_init_map(linedisp); in linedisp_register()
363 timer_setup(&linedisp->timer, linedisp_scroll, 0); in linedisp_register()
365 err = device_add(&linedisp->dev); in linedisp_register()
370 err = linedisp_display(linedisp, LINEDISP_INIT_TEXT, -1); in linedisp_register()
377 device_del(&linedisp->dev); in linedisp_register()
379 timer_delete_sync(&linedisp->timer); in linedisp_register()
381 put_device(&linedisp->dev); in linedisp_register()
391 void linedisp_unregister(struct linedisp *linedisp) in linedisp_unregister() argument
393 device_del(&linedisp->dev); in linedisp_unregister()
394 timer_delete_sync(&linedisp->timer); in linedisp_unregister()
395 put_device(&linedisp->dev); in linedisp_unregister()