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