Lines Matching refs:linedisp
33 struct linedisp *linedisp = from_timer(linedisp, t, timer); in linedisp_scroll() local
34 unsigned int i, ch = linedisp->scroll_pos; in linedisp_scroll()
35 unsigned int num_chars = linedisp->num_chars; in linedisp_scroll()
40 for (; i < num_chars && ch < linedisp->message_len; i++, ch++) in linedisp_scroll()
41 linedisp->buf[i] = linedisp->message[ch]; in linedisp_scroll()
48 linedisp->update(linedisp); in linedisp_scroll()
51 linedisp->scroll_pos++; in linedisp_scroll()
52 linedisp->scroll_pos %= linedisp->message_len; in linedisp_scroll()
55 if (linedisp->message_len > num_chars && linedisp->scroll_rate) in linedisp_scroll()
56 mod_timer(&linedisp->timer, jiffies + linedisp->scroll_rate); in linedisp_scroll()
71 static int linedisp_display(struct linedisp *linedisp, const char *msg, in linedisp_display() argument
77 del_timer_sync(&linedisp->timer); in linedisp_display()
88 kfree(linedisp->message); in linedisp_display()
89 linedisp->message = NULL; in linedisp_display()
90 linedisp->message_len = 0; in linedisp_display()
91 memset(linedisp->buf, ' ', linedisp->num_chars); in linedisp_display()
92 linedisp->update(linedisp); in linedisp_display()
100 kfree(linedisp->message); in linedisp_display()
102 linedisp->message = new_msg; in linedisp_display()
103 linedisp->message_len = count; in linedisp_display()
104 linedisp->scroll_pos = 0; in linedisp_display()
107 linedisp_scroll(&linedisp->timer); in linedisp_display()
126 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in message_show() local
128 return sysfs_emit(buf, "%s\n", linedisp->message); in message_show()
145 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in message_store() local
148 err = linedisp_display(linedisp, buf, count); in message_store()
157 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in scroll_step_ms_show() local
159 return sysfs_emit(buf, "%u\n", jiffies_to_msecs(linedisp->scroll_rate)); in scroll_step_ms_show()
166 struct linedisp *linedisp = container_of(dev, struct linedisp, dev); in scroll_step_ms_store() local
172 linedisp->scroll_rate = msecs_to_jiffies(ms); in scroll_step_ms_store()
173 if (linedisp->message && linedisp->message_len > linedisp->num_chars) { in scroll_step_ms_store()
174 del_timer_sync(&linedisp->timer); in scroll_step_ms_store()
175 if (linedisp->scroll_rate) in scroll_step_ms_store()
176 linedisp_scroll(&linedisp->timer); in scroll_step_ms_store()
189 ATTRIBUTE_GROUPS(linedisp);
205 int linedisp_register(struct linedisp *linedisp, struct device *parent, in linedisp_register() argument
207 void (*update)(struct linedisp *linedisp)) in linedisp_register() argument
212 memset(linedisp, 0, sizeof(*linedisp)); in linedisp_register()
213 linedisp->dev.parent = parent; in linedisp_register()
214 linedisp->dev.type = &linedisp_type; in linedisp_register()
215 linedisp->update = update; in linedisp_register()
216 linedisp->buf = buf; in linedisp_register()
217 linedisp->num_chars = num_chars; in linedisp_register()
218 linedisp->scroll_rate = DEFAULT_SCROLL_RATE; in linedisp_register()
220 device_initialize(&linedisp->dev); in linedisp_register()
221 dev_set_name(&linedisp->dev, "linedisp.%lu", in linedisp_register()
225 timer_setup(&linedisp->timer, linedisp_scroll, 0); in linedisp_register()
227 err = device_add(&linedisp->dev); in linedisp_register()
232 err = linedisp_display(linedisp, "Linux " UTS_RELEASE " ", -1); in linedisp_register()
239 device_del(&linedisp->dev); in linedisp_register()
241 del_timer_sync(&linedisp->timer); in linedisp_register()
242 put_device(&linedisp->dev); in linedisp_register()
252 void linedisp_unregister(struct linedisp *linedisp) in linedisp_unregister() argument
254 device_del(&linedisp->dev); in linedisp_unregister()
255 del_timer_sync(&linedisp->timer); in linedisp_unregister()
256 kfree(linedisp->message); in linedisp_unregister()
257 put_device(&linedisp->dev); in linedisp_unregister()