Merge branch 'for-3.0-important' of git://git.drbd.org/linux-2.6-drbd into for-linus
[firefly-linux-kernel-4.4.55.git] / drivers / tty / vt / keyboard.c
1 /*
2  * Written for linux by Johan Myreen as a translation from
3  * the assembly version by Linus (with diacriticals added)
4  *
5  * Some additional features added by Christoph Niemann (ChN), March 1993
6  *
7  * Loadable keymaps by Risto Kankkunen, May 1993
8  *
9  * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
10  * Added decr/incr_console, dynamic keymaps, Unicode support,
11  * dynamic function/string keys, led setting,  Sept 1994
12  * `Sticky' modifier keys, 951006.
13  *
14  * 11-11-96: SAK should now work in the raw mode (Martin Mares)
15  *
16  * Modified to provide 'generic' keyboard support by Hamish Macdonald
17  * Merge with the m68k keyboard driver and split-off of the PC low-level
18  * parts by Geert Uytterhoeven, May 1997
19  *
20  * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
21  * 30-07-98: Dead keys redone, aeb@cwi.nl.
22  * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
23  */
24
25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
26
27 #include <linux/consolemap.h>
28 #include <linux/module.h>
29 #include <linux/sched.h>
30 #include <linux/tty.h>
31 #include <linux/tty_flip.h>
32 #include <linux/mm.h>
33 #include <linux/string.h>
34 #include <linux/init.h>
35 #include <linux/slab.h>
36 #include <linux/irq.h>
37
38 #include <linux/kbd_kern.h>
39 #include <linux/kbd_diacr.h>
40 #include <linux/vt_kern.h>
41 #include <linux/input.h>
42 #include <linux/reboot.h>
43 #include <linux/notifier.h>
44 #include <linux/jiffies.h>
45
46 extern void ctrl_alt_del(void);
47
48 /*
49  * Exported functions/variables
50  */
51
52 #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
53
54 /*
55  * Some laptops take the 789uiojklm,. keys as number pad when NumLock is on.
56  * This seems a good reason to start with NumLock off. On HIL keyboards
57  * of PARISC machines however there is no NumLock key and everyone expects the keypad
58  * to be used for numbers.
59  */
60
61 #if defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD))
62 #define KBD_DEFLEDS (1 << VC_NUMLOCK)
63 #else
64 #define KBD_DEFLEDS 0
65 #endif
66
67 #define KBD_DEFLOCK 0
68
69 void compute_shiftstate(void);
70
71 /*
72  * Handler Tables.
73  */
74
75 #define K_HANDLERS\
76         k_self,         k_fn,           k_spec,         k_pad,\
77         k_dead,         k_cons,         k_cur,          k_shift,\
78         k_meta,         k_ascii,        k_lock,         k_lowercase,\
79         k_slock,        k_dead2,        k_brl,          k_ignore
80
81 typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value,
82                             char up_flag);
83 static k_handler_fn K_HANDLERS;
84 static k_handler_fn *k_handler[16] = { K_HANDLERS };
85
86 #define FN_HANDLERS\
87         fn_null,        fn_enter,       fn_show_ptregs, fn_show_mem,\
88         fn_show_state,  fn_send_intr,   fn_lastcons,    fn_caps_toggle,\
89         fn_num,         fn_hold,        fn_scroll_forw, fn_scroll_back,\
90         fn_boot_it,     fn_caps_on,     fn_compose,     fn_SAK,\
91         fn_dec_console, fn_inc_console, fn_spawn_con,   fn_bare_num
92
93 typedef void (fn_handler_fn)(struct vc_data *vc);
94 static fn_handler_fn FN_HANDLERS;
95 static fn_handler_fn *fn_handler[] = { FN_HANDLERS };
96
97 /*
98  * Variables exported for vt_ioctl.c
99  */
100
101 /* maximum values each key_handler can handle */
102 const int max_vals[] = {
103         255, ARRAY_SIZE(func_table) - 1, ARRAY_SIZE(fn_handler) - 1, NR_PAD - 1,
104         NR_DEAD - 1, 255, 3, NR_SHIFT - 1, 255, NR_ASCII - 1, NR_LOCK - 1,
105         255, NR_LOCK - 1, 255, NR_BRL - 1
106 };
107
108 const int NR_TYPES = ARRAY_SIZE(max_vals);
109
110 struct kbd_struct kbd_table[MAX_NR_CONSOLES];
111 EXPORT_SYMBOL_GPL(kbd_table);
112 static struct kbd_struct *kbd = kbd_table;
113
114 struct vt_spawn_console vt_spawn_con = {
115         .lock = __SPIN_LOCK_UNLOCKED(vt_spawn_con.lock),
116         .pid  = NULL,
117         .sig  = 0,
118 };
119
120 /*
121  * Variables exported for vt.c
122  */
123
124 int shift_state = 0;
125
126 /*
127  * Internal Data.
128  */
129
130 static struct input_handler kbd_handler;
131 static DEFINE_SPINLOCK(kbd_event_lock);
132 static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)];  /* keyboard key bitmap */
133 static unsigned char shift_down[NR_SHIFT];              /* shift state counters.. */
134 static bool dead_key_next;
135 static int npadch = -1;                                 /* -1 or number assembled on pad */
136 static unsigned int diacr;
137 static char rep;                                        /* flag telling character repeat */
138
139 static unsigned char ledstate = 0xff;                   /* undefined */
140 static unsigned char ledioctl;
141
142 static struct ledptr {
143         unsigned int *addr;
144         unsigned int mask;
145         unsigned char valid:1;
146 } ledptrs[3];
147
148 /*
149  * Notifier list for console keyboard events
150  */
151 static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
152
153 int register_keyboard_notifier(struct notifier_block *nb)
154 {
155         return atomic_notifier_chain_register(&keyboard_notifier_list, nb);
156 }
157 EXPORT_SYMBOL_GPL(register_keyboard_notifier);
158
159 int unregister_keyboard_notifier(struct notifier_block *nb)
160 {
161         return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb);
162 }
163 EXPORT_SYMBOL_GPL(unregister_keyboard_notifier);
164
165 /*
166  * Translation of scancodes to keycodes. We set them on only the first
167  * keyboard in the list that accepts the scancode and keycode.
168  * Explanation for not choosing the first attached keyboard anymore:
169  *  USB keyboards for example have two event devices: one for all "normal"
170  *  keys and one for extra function keys (like "volume up", "make coffee",
171  *  etc.). So this means that scancodes for the extra function keys won't
172  *  be valid for the first event device, but will be for the second.
173  */
174
175 struct getset_keycode_data {
176         struct input_keymap_entry ke;
177         int error;
178 };
179
180 static int getkeycode_helper(struct input_handle *handle, void *data)
181 {
182         struct getset_keycode_data *d = data;
183
184         d->error = input_get_keycode(handle->dev, &d->ke);
185
186         return d->error == 0; /* stop as soon as we successfully get one */
187 }
188
189 int getkeycode(unsigned int scancode)
190 {
191         struct getset_keycode_data d = {
192                 .ke     = {
193                         .flags          = 0,
194                         .len            = sizeof(scancode),
195                         .keycode        = 0,
196                 },
197                 .error  = -ENODEV,
198         };
199
200         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
201
202         input_handler_for_each_handle(&kbd_handler, &d, getkeycode_helper);
203
204         return d.error ?: d.ke.keycode;
205 }
206
207 static int setkeycode_helper(struct input_handle *handle, void *data)
208 {
209         struct getset_keycode_data *d = data;
210
211         d->error = input_set_keycode(handle->dev, &d->ke);
212
213         return d->error == 0; /* stop as soon as we successfully set one */
214 }
215
216 int setkeycode(unsigned int scancode, unsigned int keycode)
217 {
218         struct getset_keycode_data d = {
219                 .ke     = {
220                         .flags          = 0,
221                         .len            = sizeof(scancode),
222                         .keycode        = keycode,
223                 },
224                 .error  = -ENODEV,
225         };
226
227         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
228
229         input_handler_for_each_handle(&kbd_handler, &d, setkeycode_helper);
230
231         return d.error;
232 }
233
234 /*
235  * Making beeps and bells. Note that we prefer beeps to bells, but when
236  * shutting the sound off we do both.
237  */
238
239 static int kd_sound_helper(struct input_handle *handle, void *data)
240 {
241         unsigned int *hz = data;
242         struct input_dev *dev = handle->dev;
243
244         if (test_bit(EV_SND, dev->evbit)) {
245                 if (test_bit(SND_TONE, dev->sndbit)) {
246                         input_inject_event(handle, EV_SND, SND_TONE, *hz);
247                         if (*hz)
248                                 return 0;
249                 }
250                 if (test_bit(SND_BELL, dev->sndbit))
251                         input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
252         }
253
254         return 0;
255 }
256
257 static void kd_nosound(unsigned long ignored)
258 {
259         static unsigned int zero;
260
261         input_handler_for_each_handle(&kbd_handler, &zero, kd_sound_helper);
262 }
263
264 static DEFINE_TIMER(kd_mksound_timer, kd_nosound, 0, 0);
265
266 void kd_mksound(unsigned int hz, unsigned int ticks)
267 {
268         del_timer_sync(&kd_mksound_timer);
269
270         input_handler_for_each_handle(&kbd_handler, &hz, kd_sound_helper);
271
272         if (hz && ticks)
273                 mod_timer(&kd_mksound_timer, jiffies + ticks);
274 }
275 EXPORT_SYMBOL(kd_mksound);
276
277 /*
278  * Setting the keyboard rate.
279  */
280
281 static int kbd_rate_helper(struct input_handle *handle, void *data)
282 {
283         struct input_dev *dev = handle->dev;
284         struct kbd_repeat *rep = data;
285
286         if (test_bit(EV_REP, dev->evbit)) {
287
288                 if (rep[0].delay > 0)
289                         input_inject_event(handle,
290                                            EV_REP, REP_DELAY, rep[0].delay);
291                 if (rep[0].period > 0)
292                         input_inject_event(handle,
293                                            EV_REP, REP_PERIOD, rep[0].period);
294
295                 rep[1].delay = dev->rep[REP_DELAY];
296                 rep[1].period = dev->rep[REP_PERIOD];
297         }
298
299         return 0;
300 }
301
302 int kbd_rate(struct kbd_repeat *rep)
303 {
304         struct kbd_repeat data[2] = { *rep };
305
306         input_handler_for_each_handle(&kbd_handler, data, kbd_rate_helper);
307         *rep = data[1]; /* Copy currently used settings */
308
309         return 0;
310 }
311
312 /*
313  * Helper Functions.
314  */
315 static void put_queue(struct vc_data *vc, int ch)
316 {
317         struct tty_struct *tty = vc->port.tty;
318
319         if (tty) {
320                 tty_insert_flip_char(tty, ch, 0);
321                 con_schedule_flip(tty);
322         }
323 }
324
325 static void puts_queue(struct vc_data *vc, char *cp)
326 {
327         struct tty_struct *tty = vc->port.tty;
328
329         if (!tty)
330                 return;
331
332         while (*cp) {
333                 tty_insert_flip_char(tty, *cp, 0);
334                 cp++;
335         }
336         con_schedule_flip(tty);
337 }
338
339 static void applkey(struct vc_data *vc, int key, char mode)
340 {
341         static char buf[] = { 0x1b, 'O', 0x00, 0x00 };
342
343         buf[1] = (mode ? 'O' : '[');
344         buf[2] = key;
345         puts_queue(vc, buf);
346 }
347
348 /*
349  * Many other routines do put_queue, but I think either
350  * they produce ASCII, or they produce some user-assigned
351  * string, and in both cases we might assume that it is
352  * in utf-8 already.
353  */
354 static void to_utf8(struct vc_data *vc, uint c)
355 {
356         if (c < 0x80)
357                 /*  0******* */
358                 put_queue(vc, c);
359         else if (c < 0x800) {
360                 /* 110***** 10****** */
361                 put_queue(vc, 0xc0 | (c >> 6));
362                 put_queue(vc, 0x80 | (c & 0x3f));
363         } else if (c < 0x10000) {
364                 if (c >= 0xD800 && c < 0xE000)
365                         return;
366                 if (c == 0xFFFF)
367                         return;
368                 /* 1110**** 10****** 10****** */
369                 put_queue(vc, 0xe0 | (c >> 12));
370                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
371                 put_queue(vc, 0x80 | (c & 0x3f));
372         } else if (c < 0x110000) {
373                 /* 11110*** 10****** 10****** 10****** */
374                 put_queue(vc, 0xf0 | (c >> 18));
375                 put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
376                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
377                 put_queue(vc, 0x80 | (c & 0x3f));
378         }
379 }
380
381 /*
382  * Called after returning from RAW mode or when changing consoles - recompute
383  * shift_down[] and shift_state from key_down[] maybe called when keymap is
384  * undefined, so that shiftkey release is seen
385  */
386 void compute_shiftstate(void)
387 {
388         unsigned int i, j, k, sym, val;
389
390         shift_state = 0;
391         memset(shift_down, 0, sizeof(shift_down));
392
393         for (i = 0; i < ARRAY_SIZE(key_down); i++) {
394
395                 if (!key_down[i])
396                         continue;
397
398                 k = i * BITS_PER_LONG;
399
400                 for (j = 0; j < BITS_PER_LONG; j++, k++) {
401
402                         if (!test_bit(k, key_down))
403                                 continue;
404
405                         sym = U(key_maps[0][k]);
406                         if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
407                                 continue;
408
409                         val = KVAL(sym);
410                         if (val == KVAL(K_CAPSSHIFT))
411                                 val = KVAL(K_SHIFT);
412
413                         shift_down[val]++;
414                         shift_state |= (1 << val);
415                 }
416         }
417 }
418
419 /*
420  * We have a combining character DIACR here, followed by the character CH.
421  * If the combination occurs in the table, return the corresponding value.
422  * Otherwise, if CH is a space or equals DIACR, return DIACR.
423  * Otherwise, conclude that DIACR was not combining after all,
424  * queue it and return CH.
425  */
426 static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
427 {
428         unsigned int d = diacr;
429         unsigned int i;
430
431         diacr = 0;
432
433         if ((d & ~0xff) == BRL_UC_ROW) {
434                 if ((ch & ~0xff) == BRL_UC_ROW)
435                         return d | ch;
436         } else {
437                 for (i = 0; i < accent_table_size; i++)
438                         if (accent_table[i].diacr == d && accent_table[i].base == ch)
439                                 return accent_table[i].result;
440         }
441
442         if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
443                 return d;
444
445         if (kbd->kbdmode == VC_UNICODE)
446                 to_utf8(vc, d);
447         else {
448                 int c = conv_uni_to_8bit(d);
449                 if (c != -1)
450                         put_queue(vc, c);
451         }
452
453         return ch;
454 }
455
456 /*
457  * Special function handlers
458  */
459 static void fn_enter(struct vc_data *vc)
460 {
461         if (diacr) {
462                 if (kbd->kbdmode == VC_UNICODE)
463                         to_utf8(vc, diacr);
464                 else {
465                         int c = conv_uni_to_8bit(diacr);
466                         if (c != -1)
467                                 put_queue(vc, c);
468                 }
469                 diacr = 0;
470         }
471
472         put_queue(vc, 13);
473         if (vc_kbd_mode(kbd, VC_CRLF))
474                 put_queue(vc, 10);
475 }
476
477 static void fn_caps_toggle(struct vc_data *vc)
478 {
479         if (rep)
480                 return;
481
482         chg_vc_kbd_led(kbd, VC_CAPSLOCK);
483 }
484
485 static void fn_caps_on(struct vc_data *vc)
486 {
487         if (rep)
488                 return;
489
490         set_vc_kbd_led(kbd, VC_CAPSLOCK);
491 }
492
493 static void fn_show_ptregs(struct vc_data *vc)
494 {
495         struct pt_regs *regs = get_irq_regs();
496
497         if (regs)
498                 show_regs(regs);
499 }
500
501 static void fn_hold(struct vc_data *vc)
502 {
503         struct tty_struct *tty = vc->port.tty;
504
505         if (rep || !tty)
506                 return;
507
508         /*
509          * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
510          * these routines are also activated by ^S/^Q.
511          * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
512          */
513         if (tty->stopped)
514                 start_tty(tty);
515         else
516                 stop_tty(tty);
517 }
518
519 static void fn_num(struct vc_data *vc)
520 {
521         if (vc_kbd_mode(kbd, VC_APPLIC))
522                 applkey(vc, 'P', 1);
523         else
524                 fn_bare_num(vc);
525 }
526
527 /*
528  * Bind this to Shift-NumLock if you work in application keypad mode
529  * but want to be able to change the NumLock flag.
530  * Bind this to NumLock if you prefer that the NumLock key always
531  * changes the NumLock flag.
532  */
533 static void fn_bare_num(struct vc_data *vc)
534 {
535         if (!rep)
536                 chg_vc_kbd_led(kbd, VC_NUMLOCK);
537 }
538
539 static void fn_lastcons(struct vc_data *vc)
540 {
541         /* switch to the last used console, ChN */
542         set_console(last_console);
543 }
544
545 static void fn_dec_console(struct vc_data *vc)
546 {
547         int i, cur = fg_console;
548
549         /* Currently switching?  Queue this next switch relative to that. */
550         if (want_console != -1)
551                 cur = want_console;
552
553         for (i = cur - 1; i != cur; i--) {
554                 if (i == -1)
555                         i = MAX_NR_CONSOLES - 1;
556                 if (vc_cons_allocated(i))
557                         break;
558         }
559         set_console(i);
560 }
561
562 static void fn_inc_console(struct vc_data *vc)
563 {
564         int i, cur = fg_console;
565
566         /* Currently switching?  Queue this next switch relative to that. */
567         if (want_console != -1)
568                 cur = want_console;
569
570         for (i = cur+1; i != cur; i++) {
571                 if (i == MAX_NR_CONSOLES)
572                         i = 0;
573                 if (vc_cons_allocated(i))
574                         break;
575         }
576         set_console(i);
577 }
578
579 static void fn_send_intr(struct vc_data *vc)
580 {
581         struct tty_struct *tty = vc->port.tty;
582
583         if (!tty)
584                 return;
585         tty_insert_flip_char(tty, 0, TTY_BREAK);
586         con_schedule_flip(tty);
587 }
588
589 static void fn_scroll_forw(struct vc_data *vc)
590 {
591         scrollfront(vc, 0);
592 }
593
594 static void fn_scroll_back(struct vc_data *vc)
595 {
596         scrollback(vc, 0);
597 }
598
599 static void fn_show_mem(struct vc_data *vc)
600 {
601         show_mem(0);
602 }
603
604 static void fn_show_state(struct vc_data *vc)
605 {
606         show_state();
607 }
608
609 static void fn_boot_it(struct vc_data *vc)
610 {
611         ctrl_alt_del();
612 }
613
614 static void fn_compose(struct vc_data *vc)
615 {
616         dead_key_next = true;
617 }
618
619 static void fn_spawn_con(struct vc_data *vc)
620 {
621         spin_lock(&vt_spawn_con.lock);
622         if (vt_spawn_con.pid)
623                 if (kill_pid(vt_spawn_con.pid, vt_spawn_con.sig, 1)) {
624                         put_pid(vt_spawn_con.pid);
625                         vt_spawn_con.pid = NULL;
626                 }
627         spin_unlock(&vt_spawn_con.lock);
628 }
629
630 static void fn_SAK(struct vc_data *vc)
631 {
632         struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
633         schedule_work(SAK_work);
634 }
635
636 static void fn_null(struct vc_data *vc)
637 {
638         compute_shiftstate();
639 }
640
641 /*
642  * Special key handlers
643  */
644 static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
645 {
646 }
647
648 static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
649 {
650         if (up_flag)
651                 return;
652         if (value >= ARRAY_SIZE(fn_handler))
653                 return;
654         if ((kbd->kbdmode == VC_RAW ||
655              kbd->kbdmode == VC_MEDIUMRAW ||
656              kbd->kbdmode == VC_OFF) &&
657              value != KVAL(K_SAK))
658                 return;         /* SAK is allowed even in raw mode */
659         fn_handler[value](vc);
660 }
661
662 static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
663 {
664         pr_err("k_lowercase was called - impossible\n");
665 }
666
667 static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
668 {
669         if (up_flag)
670                 return;         /* no action, if this is a key release */
671
672         if (diacr)
673                 value = handle_diacr(vc, value);
674
675         if (dead_key_next) {
676                 dead_key_next = false;
677                 diacr = value;
678                 return;
679         }
680         if (kbd->kbdmode == VC_UNICODE)
681                 to_utf8(vc, value);
682         else {
683                 int c = conv_uni_to_8bit(value);
684                 if (c != -1)
685                         put_queue(vc, c);
686         }
687 }
688
689 /*
690  * Handle dead key. Note that we now may have several
691  * dead keys modifying the same character. Very useful
692  * for Vietnamese.
693  */
694 static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
695 {
696         if (up_flag)
697                 return;
698
699         diacr = (diacr ? handle_diacr(vc, value) : value);
700 }
701
702 static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
703 {
704         k_unicode(vc, conv_8bit_to_uni(value), up_flag);
705 }
706
707 static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
708 {
709         k_deadunicode(vc, value, up_flag);
710 }
711
712 /*
713  * Obsolete - for backwards compatibility only
714  */
715 static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
716 {
717         static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
718
719         k_deadunicode(vc, ret_diacr[value], up_flag);
720 }
721
722 static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
723 {
724         if (up_flag)
725                 return;
726
727         set_console(value);
728 }
729
730 static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
731 {
732         if (up_flag)
733                 return;
734
735         if ((unsigned)value < ARRAY_SIZE(func_table)) {
736                 if (func_table[value])
737                         puts_queue(vc, func_table[value]);
738         } else
739                 pr_err("k_fn called with value=%d\n", value);
740 }
741
742 static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
743 {
744         static const char cur_chars[] = "BDCA";
745
746         if (up_flag)
747                 return;
748
749         applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
750 }
751
752 static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
753 {
754         static const char pad_chars[] = "0123456789+-*/\015,.?()#";
755         static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
756
757         if (up_flag)
758                 return;         /* no action, if this is a key release */
759
760         /* kludge... shift forces cursor/number keys */
761         if (vc_kbd_mode(kbd, VC_APPLIC) && !shift_down[KG_SHIFT]) {
762                 applkey(vc, app_map[value], 1);
763                 return;
764         }
765
766         if (!vc_kbd_led(kbd, VC_NUMLOCK)) {
767
768                 switch (value) {
769                 case KVAL(K_PCOMMA):
770                 case KVAL(K_PDOT):
771                         k_fn(vc, KVAL(K_REMOVE), 0);
772                         return;
773                 case KVAL(K_P0):
774                         k_fn(vc, KVAL(K_INSERT), 0);
775                         return;
776                 case KVAL(K_P1):
777                         k_fn(vc, KVAL(K_SELECT), 0);
778                         return;
779                 case KVAL(K_P2):
780                         k_cur(vc, KVAL(K_DOWN), 0);
781                         return;
782                 case KVAL(K_P3):
783                         k_fn(vc, KVAL(K_PGDN), 0);
784                         return;
785                 case KVAL(K_P4):
786                         k_cur(vc, KVAL(K_LEFT), 0);
787                         return;
788                 case KVAL(K_P6):
789                         k_cur(vc, KVAL(K_RIGHT), 0);
790                         return;
791                 case KVAL(K_P7):
792                         k_fn(vc, KVAL(K_FIND), 0);
793                         return;
794                 case KVAL(K_P8):
795                         k_cur(vc, KVAL(K_UP), 0);
796                         return;
797                 case KVAL(K_P9):
798                         k_fn(vc, KVAL(K_PGUP), 0);
799                         return;
800                 case KVAL(K_P5):
801                         applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
802                         return;
803                 }
804         }
805
806         put_queue(vc, pad_chars[value]);
807         if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
808                 put_queue(vc, 10);
809 }
810
811 static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
812 {
813         int old_state = shift_state;
814
815         if (rep)
816                 return;
817         /*
818          * Mimic typewriter:
819          * a CapsShift key acts like Shift but undoes CapsLock
820          */
821         if (value == KVAL(K_CAPSSHIFT)) {
822                 value = KVAL(K_SHIFT);
823                 if (!up_flag)
824                         clr_vc_kbd_led(kbd, VC_CAPSLOCK);
825         }
826
827         if (up_flag) {
828                 /*
829                  * handle the case that two shift or control
830                  * keys are depressed simultaneously
831                  */
832                 if (shift_down[value])
833                         shift_down[value]--;
834         } else
835                 shift_down[value]++;
836
837         if (shift_down[value])
838                 shift_state |= (1 << value);
839         else
840                 shift_state &= ~(1 << value);
841
842         /* kludge */
843         if (up_flag && shift_state != old_state && npadch != -1) {
844                 if (kbd->kbdmode == VC_UNICODE)
845                         to_utf8(vc, npadch);
846                 else
847                         put_queue(vc, npadch & 0xff);
848                 npadch = -1;
849         }
850 }
851
852 static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
853 {
854         if (up_flag)
855                 return;
856
857         if (vc_kbd_mode(kbd, VC_META)) {
858                 put_queue(vc, '\033');
859                 put_queue(vc, value);
860         } else
861                 put_queue(vc, value | 0x80);
862 }
863
864 static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
865 {
866         int base;
867
868         if (up_flag)
869                 return;
870
871         if (value < 10) {
872                 /* decimal input of code, while Alt depressed */
873                 base = 10;
874         } else {
875                 /* hexadecimal input of code, while AltGr depressed */
876                 value -= 10;
877                 base = 16;
878         }
879
880         if (npadch == -1)
881                 npadch = value;
882         else
883                 npadch = npadch * base + value;
884 }
885
886 static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
887 {
888         if (up_flag || rep)
889                 return;
890
891         chg_vc_kbd_lock(kbd, value);
892 }
893
894 static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
895 {
896         k_shift(vc, value, up_flag);
897         if (up_flag || rep)
898                 return;
899
900         chg_vc_kbd_slock(kbd, value);
901         /* try to make Alt, oops, AltGr and such work */
902         if (!key_maps[kbd->lockstate ^ kbd->slockstate]) {
903                 kbd->slockstate = 0;
904                 chg_vc_kbd_slock(kbd, value);
905         }
906 }
907
908 /* by default, 300ms interval for combination release */
909 static unsigned brl_timeout = 300;
910 MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for commit on first key release)");
911 module_param(brl_timeout, uint, 0644);
912
913 static unsigned brl_nbchords = 1;
914 MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)");
915 module_param(brl_nbchords, uint, 0644);
916
917 static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
918 {
919         static unsigned long chords;
920         static unsigned committed;
921
922         if (!brl_nbchords)
923                 k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag);
924         else {
925                 committed |= pattern;
926                 chords++;
927                 if (chords == brl_nbchords) {
928                         k_unicode(vc, BRL_UC_ROW | committed, up_flag);
929                         chords = 0;
930                         committed = 0;
931                 }
932         }
933 }
934
935 static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
936 {
937         static unsigned pressed, committing;
938         static unsigned long releasestart;
939
940         if (kbd->kbdmode != VC_UNICODE) {
941                 if (!up_flag)
942                         pr_warning("keyboard mode must be unicode for braille patterns\n");
943                 return;
944         }
945
946         if (!value) {
947                 k_unicode(vc, BRL_UC_ROW, up_flag);
948                 return;
949         }
950
951         if (value > 8)
952                 return;
953
954         if (!up_flag) {
955                 pressed |= 1 << (value - 1);
956                 if (!brl_timeout)
957                         committing = pressed;
958         } else if (brl_timeout) {
959                 if (!committing ||
960                     time_after(jiffies,
961                                releasestart + msecs_to_jiffies(brl_timeout))) {
962                         committing = pressed;
963                         releasestart = jiffies;
964                 }
965                 pressed &= ~(1 << (value - 1));
966                 if (!pressed && committing) {
967                         k_brlcommit(vc, committing, 0);
968                         committing = 0;
969                 }
970         } else {
971                 if (committing) {
972                         k_brlcommit(vc, committing, 0);
973                         committing = 0;
974                 }
975                 pressed &= ~(1 << (value - 1));
976         }
977 }
978
979 /*
980  * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
981  * or (ii) whatever pattern of lights people want to show using KDSETLED,
982  * or (iii) specified bits of specified words in kernel memory.
983  */
984 unsigned char getledstate(void)
985 {
986         return ledstate;
987 }
988
989 void setledstate(struct kbd_struct *kbd, unsigned int led)
990 {
991         if (!(led & ~7)) {
992                 ledioctl = led;
993                 kbd->ledmode = LED_SHOW_IOCTL;
994         } else
995                 kbd->ledmode = LED_SHOW_FLAGS;
996
997         set_leds();
998 }
999
1000 static inline unsigned char getleds(void)
1001 {
1002         struct kbd_struct *kbd = kbd_table + fg_console;
1003         unsigned char leds;
1004         int i;
1005
1006         if (kbd->ledmode == LED_SHOW_IOCTL)
1007                 return ledioctl;
1008
1009         leds = kbd->ledflagstate;
1010
1011         if (kbd->ledmode == LED_SHOW_MEM) {
1012                 for (i = 0; i < 3; i++)
1013                         if (ledptrs[i].valid) {
1014                                 if (*ledptrs[i].addr & ledptrs[i].mask)
1015                                         leds |= (1 << i);
1016                                 else
1017                                         leds &= ~(1 << i);
1018                         }
1019         }
1020         return leds;
1021 }
1022
1023 static int kbd_update_leds_helper(struct input_handle *handle, void *data)
1024 {
1025         unsigned char leds = *(unsigned char *)data;
1026
1027         if (test_bit(EV_LED, handle->dev->evbit)) {
1028                 input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & 0x01));
1029                 input_inject_event(handle, EV_LED, LED_NUML,    !!(leds & 0x02));
1030                 input_inject_event(handle, EV_LED, LED_CAPSL,   !!(leds & 0x04));
1031                 input_inject_event(handle, EV_SYN, SYN_REPORT, 0);
1032         }
1033
1034         return 0;
1035 }
1036
1037 /*
1038  * This is the tasklet that updates LED state on all keyboards
1039  * attached to the box. The reason we use tasklet is that we
1040  * need to handle the scenario when keyboard handler is not
1041  * registered yet but we already getting updates form VT to
1042  * update led state.
1043  */
1044 static void kbd_bh(unsigned long dummy)
1045 {
1046         unsigned char leds = getleds();
1047
1048         if (leds != ledstate) {
1049                 input_handler_for_each_handle(&kbd_handler, &leds,
1050                                               kbd_update_leds_helper);
1051                 ledstate = leds;
1052         }
1053 }
1054
1055 DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh, 0);
1056
1057 #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
1058     defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
1059     defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
1060     (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC)) ||\
1061     defined(CONFIG_AVR32)
1062
1063 #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1064                         ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1065
1066 static const unsigned short x86_keycodes[256] =
1067         { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1068          16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1069          32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1070          48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1071          64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1072          80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92,
1073         284,285,309,  0,312, 91,327,328,329,331,333,335,336,337,338,339,
1074         367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349,
1075         360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355,
1076         103,104,105,275,287,279,258,106,274,107,294,364,358,363,362,361,
1077         291,108,381,281,290,272,292,305,280, 99,112,257,306,359,113,114,
1078         264,117,271,374,379,265,266, 93, 94, 95, 85,259,375,260, 90,116,
1079         377,109,111,277,278,282,283,295,296,297,299,300,301,293,303,307,
1080         308,310,313,314,315,317,318,319,320,357,322,323,324,325,276,330,
1081         332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
1082
1083 #ifdef CONFIG_SPARC
1084 static int sparc_l1_a_state;
1085 extern void sun_do_break(void);
1086 #endif
1087
1088 static int emulate_raw(struct vc_data *vc, unsigned int keycode,
1089                        unsigned char up_flag)
1090 {
1091         int code;
1092
1093         switch (keycode) {
1094
1095         case KEY_PAUSE:
1096                 put_queue(vc, 0xe1);
1097                 put_queue(vc, 0x1d | up_flag);
1098                 put_queue(vc, 0x45 | up_flag);
1099                 break;
1100
1101         case KEY_HANGEUL:
1102                 if (!up_flag)
1103                         put_queue(vc, 0xf2);
1104                 break;
1105
1106         case KEY_HANJA:
1107                 if (!up_flag)
1108                         put_queue(vc, 0xf1);
1109                 break;
1110
1111         case KEY_SYSRQ:
1112                 /*
1113                  * Real AT keyboards (that's what we're trying
1114                  * to emulate here emit 0xe0 0x2a 0xe0 0x37 when
1115                  * pressing PrtSc/SysRq alone, but simply 0x54
1116                  * when pressing Alt+PrtSc/SysRq.
1117                  */
1118                 if (test_bit(KEY_LEFTALT, key_down) ||
1119                     test_bit(KEY_RIGHTALT, key_down)) {
1120                         put_queue(vc, 0x54 | up_flag);
1121                 } else {
1122                         put_queue(vc, 0xe0);
1123                         put_queue(vc, 0x2a | up_flag);
1124                         put_queue(vc, 0xe0);
1125                         put_queue(vc, 0x37 | up_flag);
1126                 }
1127                 break;
1128
1129         default:
1130                 if (keycode > 255)
1131                         return -1;
1132
1133                 code = x86_keycodes[keycode];
1134                 if (!code)
1135                         return -1;
1136
1137                 if (code & 0x100)
1138                         put_queue(vc, 0xe0);
1139                 put_queue(vc, (code & 0x7f) | up_flag);
1140
1141                 break;
1142         }
1143
1144         return 0;
1145 }
1146
1147 #else
1148
1149 #define HW_RAW(dev)     0
1150
1151 static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag)
1152 {
1153         if (keycode > 127)
1154                 return -1;
1155
1156         put_queue(vc, keycode | up_flag);
1157         return 0;
1158 }
1159 #endif
1160
1161 static void kbd_rawcode(unsigned char data)
1162 {
1163         struct vc_data *vc = vc_cons[fg_console].d;
1164
1165         kbd = kbd_table + vc->vc_num;
1166         if (kbd->kbdmode == VC_RAW)
1167                 put_queue(vc, data);
1168 }
1169
1170 static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
1171 {
1172         struct vc_data *vc = vc_cons[fg_console].d;
1173         unsigned short keysym, *key_map;
1174         unsigned char type;
1175         bool raw_mode;
1176         struct tty_struct *tty;
1177         int shift_final;
1178         struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down };
1179         int rc;
1180
1181         tty = vc->port.tty;
1182
1183         if (tty && (!tty->driver_data)) {
1184                 /* No driver data? Strange. Okay we fix it then. */
1185                 tty->driver_data = vc;
1186         }
1187
1188         kbd = kbd_table + vc->vc_num;
1189
1190 #ifdef CONFIG_SPARC
1191         if (keycode == KEY_STOP)
1192                 sparc_l1_a_state = down;
1193 #endif
1194
1195         rep = (down == 2);
1196
1197         raw_mode = (kbd->kbdmode == VC_RAW);
1198         if (raw_mode && !hw_raw)
1199                 if (emulate_raw(vc, keycode, !down << 7))
1200                         if (keycode < BTN_MISC && printk_ratelimit())
1201                                 pr_warning("can't emulate rawmode for keycode %d\n",
1202                                            keycode);
1203
1204 #ifdef CONFIG_SPARC
1205         if (keycode == KEY_A && sparc_l1_a_state) {
1206                 sparc_l1_a_state = false;
1207                 sun_do_break();
1208         }
1209 #endif
1210
1211         if (kbd->kbdmode == VC_MEDIUMRAW) {
1212                 /*
1213                  * This is extended medium raw mode, with keys above 127
1214                  * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1215                  * the 'up' flag if needed. 0 is reserved, so this shouldn't
1216                  * interfere with anything else. The two bytes after 0 will
1217                  * always have the up flag set not to interfere with older
1218                  * applications. This allows for 16384 different keycodes,
1219                  * which should be enough.
1220                  */
1221                 if (keycode < 128) {
1222                         put_queue(vc, keycode | (!down << 7));
1223                 } else {
1224                         put_queue(vc, !down << 7);
1225                         put_queue(vc, (keycode >> 7) | 0x80);
1226                         put_queue(vc, keycode | 0x80);
1227                 }
1228                 raw_mode = true;
1229         }
1230
1231         if (down)
1232                 set_bit(keycode, key_down);
1233         else
1234                 clear_bit(keycode, key_down);
1235
1236         if (rep &&
1237             (!vc_kbd_mode(kbd, VC_REPEAT) ||
1238              (tty && !L_ECHO(tty) && tty_chars_in_buffer(tty)))) {
1239                 /*
1240                  * Don't repeat a key if the input buffers are not empty and the
1241                  * characters get aren't echoed locally. This makes key repeat
1242                  * usable with slow applications and under heavy loads.
1243                  */
1244                 return;
1245         }
1246
1247         param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
1248         param.ledstate = kbd->ledflagstate;
1249         key_map = key_maps[shift_final];
1250
1251         rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1252                                         KBD_KEYCODE, &param);
1253         if (rc == NOTIFY_STOP || !key_map) {
1254                 atomic_notifier_call_chain(&keyboard_notifier_list,
1255                                            KBD_UNBOUND_KEYCODE, &param);
1256                 compute_shiftstate();
1257                 kbd->slockstate = 0;
1258                 return;
1259         }
1260
1261         if (keycode < NR_KEYS)
1262                 keysym = key_map[keycode];
1263         else if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
1264                 keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
1265         else
1266                 return;
1267
1268         type = KTYP(keysym);
1269
1270         if (type < 0xf0) {
1271                 param.value = keysym;
1272                 rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1273                                                 KBD_UNICODE, &param);
1274                 if (rc != NOTIFY_STOP)
1275                         if (down && !raw_mode)
1276                                 to_utf8(vc, keysym);
1277                 return;
1278         }
1279
1280         type -= 0xf0;
1281
1282         if (type == KT_LETTER) {
1283                 type = KT_LATIN;
1284                 if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
1285                         key_map = key_maps[shift_final ^ (1 << KG_SHIFT)];
1286                         if (key_map)
1287                                 keysym = key_map[keycode];
1288                 }
1289         }
1290
1291         param.value = keysym;
1292         rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1293                                         KBD_KEYSYM, &param);
1294         if (rc == NOTIFY_STOP)
1295                 return;
1296
1297         if ((raw_mode || kbd->kbdmode == VC_OFF) && type != KT_SPEC && type != KT_SHIFT)
1298                 return;
1299
1300         (*k_handler[type])(vc, keysym & 0xff, !down);
1301
1302         param.ledstate = kbd->ledflagstate;
1303         atomic_notifier_call_chain(&keyboard_notifier_list, KBD_POST_KEYSYM, &param);
1304
1305         if (type != KT_SLOCK)
1306                 kbd->slockstate = 0;
1307 }
1308
1309 static void kbd_event(struct input_handle *handle, unsigned int event_type,
1310                       unsigned int event_code, int value)
1311 {
1312         /* We are called with interrupts disabled, just take the lock */
1313         spin_lock(&kbd_event_lock);
1314
1315         if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev))
1316                 kbd_rawcode(value);
1317         if (event_type == EV_KEY)
1318                 kbd_keycode(event_code, value, HW_RAW(handle->dev));
1319
1320         spin_unlock(&kbd_event_lock);
1321
1322         tasklet_schedule(&keyboard_tasklet);
1323         do_poke_blanked_console = 1;
1324         schedule_console_callback();
1325 }
1326
1327 static bool kbd_match(struct input_handler *handler, struct input_dev *dev)
1328 {
1329         int i;
1330
1331         if (test_bit(EV_SND, dev->evbit))
1332                 return true;
1333
1334         if (test_bit(EV_KEY, dev->evbit)) {
1335                 for (i = KEY_RESERVED; i < BTN_MISC; i++)
1336                         if (test_bit(i, dev->keybit))
1337                                 return true;
1338                 for (i = KEY_BRL_DOT1; i <= KEY_BRL_DOT10; i++)
1339                         if (test_bit(i, dev->keybit))
1340                                 return true;
1341         }
1342
1343         return false;
1344 }
1345
1346 /*
1347  * When a keyboard (or other input device) is found, the kbd_connect
1348  * function is called. The function then looks at the device, and if it
1349  * likes it, it can open it and get events from it. In this (kbd_connect)
1350  * function, we should decide which VT to bind that keyboard to initially.
1351  */
1352 static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
1353                         const struct input_device_id *id)
1354 {
1355         struct input_handle *handle;
1356         int error;
1357
1358         handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
1359         if (!handle)
1360                 return -ENOMEM;
1361
1362         handle->dev = dev;
1363         handle->handler = handler;
1364         handle->name = "kbd";
1365
1366         error = input_register_handle(handle);
1367         if (error)
1368                 goto err_free_handle;
1369
1370         error = input_open_device(handle);
1371         if (error)
1372                 goto err_unregister_handle;
1373
1374         return 0;
1375
1376  err_unregister_handle:
1377         input_unregister_handle(handle);
1378  err_free_handle:
1379         kfree(handle);
1380         return error;
1381 }
1382
1383 static void kbd_disconnect(struct input_handle *handle)
1384 {
1385         input_close_device(handle);
1386         input_unregister_handle(handle);
1387         kfree(handle);
1388 }
1389
1390 /*
1391  * Start keyboard handler on the new keyboard by refreshing LED state to
1392  * match the rest of the system.
1393  */
1394 static void kbd_start(struct input_handle *handle)
1395 {
1396         tasklet_disable(&keyboard_tasklet);
1397
1398         if (ledstate != 0xff)
1399                 kbd_update_leds_helper(handle, &ledstate);
1400
1401         tasklet_enable(&keyboard_tasklet);
1402 }
1403
1404 static const struct input_device_id kbd_ids[] = {
1405         {
1406                 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1407                 .evbit = { BIT_MASK(EV_KEY) },
1408         },
1409
1410         {
1411                 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1412                 .evbit = { BIT_MASK(EV_SND) },
1413         },
1414
1415         { },    /* Terminating entry */
1416 };
1417
1418 MODULE_DEVICE_TABLE(input, kbd_ids);
1419
1420 static struct input_handler kbd_handler = {
1421         .event          = kbd_event,
1422         .match          = kbd_match,
1423         .connect        = kbd_connect,
1424         .disconnect     = kbd_disconnect,
1425         .start          = kbd_start,
1426         .name           = "kbd",
1427         .id_table       = kbd_ids,
1428 };
1429
1430 int __init kbd_init(void)
1431 {
1432         int i;
1433         int error;
1434
1435         for (i = 0; i < MAX_NR_CONSOLES; i++) {
1436                 kbd_table[i].ledflagstate = KBD_DEFLEDS;
1437                 kbd_table[i].default_ledflagstate = KBD_DEFLEDS;
1438                 kbd_table[i].ledmode = LED_SHOW_FLAGS;
1439                 kbd_table[i].lockstate = KBD_DEFLOCK;
1440                 kbd_table[i].slockstate = 0;
1441                 kbd_table[i].modeflags = KBD_DEFMODE;
1442                 kbd_table[i].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
1443         }
1444
1445         error = input_register_handler(&kbd_handler);
1446         if (error)
1447                 return error;
1448
1449         tasklet_enable(&keyboard_tasklet);
1450         tasklet_schedule(&keyboard_tasklet);
1451
1452         return 0;
1453 }