2  * AT and PS/2 keyboard driver
 
   4  * Copyright (c) 1999-2002 Vojtech Pavlik
 
   8  * This program is free software; you can redistribute it and/or modify it
 
   9  * under the terms of the GNU General Public License version 2 as published by
 
  10  * the Free Software Foundation.
 
  14  * This driver can handle standard AT keyboards and PS/2 keyboards in
 
  15  * Translated and Raw Set 2 and Set 3, as well as AT keyboards on dumb
 
  16  * input-only controllers and AT keyboards connected over a one way RS232
 
  20 #include <linux/delay.h>
 
  21 #include <linux/module.h>
 
  22 #include <linux/moduleparam.h>
 
  23 #include <linux/slab.h>
 
  24 #include <linux/interrupt.h>
 
  25 #include <linux/init.h>
 
  26 #include <linux/input.h>
 
  27 #include <linux/serio.h>
 
  28 #include <linux/workqueue.h>
 
  29 #include <linux/libps2.h>
 
  30 #include <linux/mutex.h>
 
  32 #define DRIVER_DESC     "AT and PS/2 keyboard driver"
 
  34 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
 
  35 MODULE_DESCRIPTION(DRIVER_DESC);
 
  36 MODULE_LICENSE("GPL");
 
  38 static int atkbd_set = 2;
 
  39 module_param_named(set, atkbd_set, int, 0);
 
  40 MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
 
  42 #if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
 
  43 static int atkbd_reset;
 
  45 static int atkbd_reset = 1;
 
  47 module_param_named(reset, atkbd_reset, bool, 0);
 
  48 MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
 
  50 static int atkbd_softrepeat;
 
  51 module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
 
  52 MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
 
  54 static int atkbd_softraw = 1;
 
  55 module_param_named(softraw, atkbd_softraw, bool, 0);
 
  56 MODULE_PARM_DESC(softraw, "Use software generated rawmode");
 
  58 static int atkbd_scroll;
 
  59 module_param_named(scroll, atkbd_scroll, bool, 0);
 
  60 MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
 
  62 static int atkbd_extra;
 
  63 module_param_named(extra, atkbd_extra, bool, 0);
 
  64 MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
 
  66 __obsolete_setup("atkbd_set=");
 
  67 __obsolete_setup("atkbd_reset");
 
  68 __obsolete_setup("atkbd_softrepeat=");
 
  71  * Scancode to keycode tables. These are just the default setting, and
 
  72  * are loadable via an userland utility.
 
  75 static unsigned char atkbd_set2_keycode[512] = {
 
  77 #ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
 
  79 /* XXX: need a more general approach */
 
  81 #include "hpps2atkbd.h" /* include the keyboard scancodes */
 
  84           0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
 
  85           0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
 
  86           0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
 
  87           0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
 
  88           0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
 
  89           0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
 
  90           0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
 
  91          82, 83, 80, 76, 77, 72,  1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
 
  93           0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
 
  94         217,100,255,  0, 97,165,  0,  0,156,  0,  0,  0,  0,  0,  0,125,
 
  95         173,114,  0,113,  0,  0,  0,126,128,  0,  0,140,  0,  0,  0,127,
 
  96         159,  0,115,  0,164,  0,  0,116,158,  0,150,166,  0,  0,  0,142,
 
  97         157,  0,  0,  0,  0,  0,  0,  0,155,  0, 98,  0,  0,163,  0,  0,
 
  98         226,  0,  0,  0,  0,  0,  0,  0,  0,255, 96,  0,  0,  0,143,  0,
 
  99           0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
 
 100         110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
 
 106 static unsigned char atkbd_set3_keycode[512] = {
 
 108           0,  0,  0,  0,  0,  0,  0, 59,  1,138,128,129,130, 15, 41, 60,
 
 109         131, 29, 42, 86, 58, 16,  2, 61,133, 56, 44, 31, 30, 17,  3, 62,
 
 110         134, 46, 45, 32, 18,  5,  4, 63,135, 57, 47, 33, 20, 19,  6, 64,
 
 111         136, 49, 48, 35, 34, 21,  7, 65,137,100, 50, 36, 22,  8,  9, 66,
 
 112         125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
 
 113         113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
 
 114         108,105,119,103,111,107, 14,110,  0, 79,106, 75, 71,109,102,104,
 
 115          82, 83, 80, 76, 77, 72, 69, 98,  0, 96, 81,  0, 78, 73, 55,183,
 
 117         184,185,186,187, 74, 94, 92, 93,  0,  0,  0,125,126,127,112,  0,
 
 118           0,139,150,163,165,115,152,150,166,140,160,154,113,114,167,168,
 
 122 static unsigned char atkbd_unxlate_table[128] = {
 
 123           0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
 
 124          21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
 
 125          35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
 
 126          50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88,  5,  6,  4, 12,  3,
 
 127          11,  2, 10,  1,  9,119,126,108,117,125,123,107,115,116,121,105,
 
 128         114,122,112,113,127, 96, 97,120,  7, 15, 23, 31, 39, 47, 55, 63,
 
 129          71, 79, 86, 94,  8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
 
 130          19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
 
 133 #define ATKBD_CMD_SETLEDS       0x10ed
 
 134 #define ATKBD_CMD_GSCANSET      0x11f0
 
 135 #define ATKBD_CMD_SSCANSET      0x10f0
 
 136 #define ATKBD_CMD_GETID         0x02f2
 
 137 #define ATKBD_CMD_SETREP        0x10f3
 
 138 #define ATKBD_CMD_ENABLE        0x00f4
 
 139 #define ATKBD_CMD_RESET_DIS     0x00f5
 
 140 #define ATKBD_CMD_SETALL_MBR    0x00fa
 
 141 #define ATKBD_CMD_RESET_BAT     0x02ff
 
 142 #define ATKBD_CMD_RESEND        0x00fe
 
 143 #define ATKBD_CMD_EX_ENABLE     0x10ea
 
 144 #define ATKBD_CMD_EX_SETLEDS    0x20eb
 
 145 #define ATKBD_CMD_OK_GETID      0x02e8
 
 147 #define ATKBD_RET_ACK           0xfa
 
 148 #define ATKBD_RET_NAK           0xfe
 
 149 #define ATKBD_RET_BAT           0xaa
 
 150 #define ATKBD_RET_EMUL0         0xe0
 
 151 #define ATKBD_RET_EMUL1         0xe1
 
 152 #define ATKBD_RET_RELEASE       0xf0
 
 153 #define ATKBD_RET_HANJA         0xf1
 
 154 #define ATKBD_RET_HANGEUL       0xf2
 
 155 #define ATKBD_RET_ERR           0xff
 
 157 #define ATKBD_KEY_UNKNOWN         0
 
 158 #define ATKBD_KEY_NULL          255
 
 160 #define ATKBD_SCR_1             254
 
 161 #define ATKBD_SCR_2             253
 
 162 #define ATKBD_SCR_4             252
 
 163 #define ATKBD_SCR_8             251
 
 164 #define ATKBD_SCR_CLICK         250
 
 165 #define ATKBD_SCR_LEFT          249
 
 166 #define ATKBD_SCR_RIGHT         248
 
 168 #define ATKBD_SPECIAL           248
 
 170 #define ATKBD_LED_EVENT_BIT     0
 
 171 #define ATKBD_REP_EVENT_BIT     1
 
 173 #define ATKBD_XL_ERR            0x01
 
 174 #define ATKBD_XL_BAT            0x02
 
 175 #define ATKBD_XL_ACK            0x04
 
 176 #define ATKBD_XL_NAK            0x08
 
 177 #define ATKBD_XL_HANGEUL        0x10
 
 178 #define ATKBD_XL_HANJA          0x20
 
 181         unsigned char keycode;
 
 183 } atkbd_scroll_keys[] = {
 
 184         { ATKBD_SCR_1,     0xc5 },
 
 185         { ATKBD_SCR_2,     0x9d },
 
 186         { ATKBD_SCR_4,     0xa4 },
 
 187         { ATKBD_SCR_8,     0x9b },
 
 188         { ATKBD_SCR_CLICK, 0xe0 },
 
 189         { ATKBD_SCR_LEFT,  0xcb },
 
 190         { ATKBD_SCR_RIGHT, 0xd2 },
 
 194  * The atkbd control structure
 
 199         struct ps2dev ps2dev;
 
 200         struct input_dev *dev;
 
 202         /* Written only during init */
 
 207         unsigned char keycode[512];
 
 209         unsigned char translated;
 
 212         unsigned char softrepeat;
 
 213         unsigned char softraw;
 
 214         unsigned char scroll;
 
 215         unsigned char enabled;
 
 217         /* Accessed only from interrupt */
 
 219         unsigned char resend;
 
 220         unsigned char release;
 
 221         unsigned long xl_bit;
 
 224         unsigned long err_count;
 
 226         struct work_struct event_work;
 
 227         struct mutex event_mutex;
 
 228         unsigned long event_mask;
 
 231 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
 
 232                                 ssize_t (*handler)(struct atkbd *, char *));
 
 233 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
 
 234                                 ssize_t (*handler)(struct atkbd *, const char *, size_t));
 
 235 #define ATKBD_DEFINE_ATTR(_name)                                                \
 
 236 static ssize_t atkbd_show_##_name(struct atkbd *, char *);                      \
 
 237 static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t);         \
 
 238 static ssize_t atkbd_do_show_##_name(struct device *d,                          \
 
 239                                 struct device_attribute *attr, char *b)         \
 
 241         return atkbd_attr_show_helper(d, b, atkbd_show_##_name);                \
 
 243 static ssize_t atkbd_do_set_##_name(struct device *d,                           \
 
 244                         struct device_attribute *attr, const char *b, size_t s) \
 
 246         return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name);               \
 
 248 static struct device_attribute atkbd_attr_##_name =                             \
 
 249         __ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
 
 251 ATKBD_DEFINE_ATTR(extra);
 
 252 ATKBD_DEFINE_ATTR(scroll);
 
 253 ATKBD_DEFINE_ATTR(set);
 
 254 ATKBD_DEFINE_ATTR(softrepeat);
 
 255 ATKBD_DEFINE_ATTR(softraw);
 
 257 #define ATKBD_DEFINE_RO_ATTR(_name)                                             \
 
 258 static ssize_t atkbd_show_##_name(struct atkbd *, char *);                      \
 
 259 static ssize_t atkbd_do_show_##_name(struct device *d,                          \
 
 260                                 struct device_attribute *attr, char *b)         \
 
 262         return atkbd_attr_show_helper(d, b, atkbd_show_##_name);                \
 
 264 static struct device_attribute atkbd_attr_##_name =                             \
 
 265         __ATTR(_name, S_IRUGO, atkbd_do_show_##_name, NULL);
 
 267 ATKBD_DEFINE_RO_ATTR(err_count);
 
 269 static struct attribute *atkbd_attributes[] = {
 
 270         &atkbd_attr_extra.attr,
 
 271         &atkbd_attr_scroll.attr,
 
 272         &atkbd_attr_set.attr,
 
 273         &atkbd_attr_softrepeat.attr,
 
 274         &atkbd_attr_softraw.attr,
 
 275         &atkbd_attr_err_count.attr,
 
 279 static struct attribute_group atkbd_attribute_group = {
 
 280         .attrs  = atkbd_attributes,
 
 283 static const unsigned int xl_table[] = {
 
 284         ATKBD_RET_BAT, ATKBD_RET_ERR, ATKBD_RET_ACK,
 
 285         ATKBD_RET_NAK, ATKBD_RET_HANJA, ATKBD_RET_HANGEUL,
 
 289  * Checks if we should mangle the scancode to extract 'release' bit
 
 290  * in translated mode.
 
 292 static int atkbd_need_xlate(unsigned long xl_bit, unsigned char code)
 
 296         if (code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1)
 
 299         for (i = 0; i < ARRAY_SIZE(xl_table); i++)
 
 300                 if (code == xl_table[i])
 
 301                         return test_bit(i, &xl_bit);
 
 307  * Calculates new value of xl_bit so the driver can distinguish
 
 308  * between make/break pair of scancodes for select keys and PS/2
 
 309  * protocol responses.
 
 311 static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
 
 315         for (i = 0; i < ARRAY_SIZE(xl_table); i++) {
 
 316                 if (!((code ^ xl_table[i]) & 0x7f)) {
 
 318                                 __clear_bit(i, &atkbd->xl_bit);
 
 320                                 __set_bit(i, &atkbd->xl_bit);
 
 327  * Encode the scancode, 0xe0 prefix, and high bit into a single integer,
 
 328  * keeping kernel 2.4 compatibility for set 2
 
 330 static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
 
 332         if (atkbd->set == 3) {
 
 333                 if (atkbd->emul == 1)
 
 336                 code = (code & 0x7f) | ((code & 0x80) << 1);
 
 337                 if (atkbd->emul == 1)
 
 345  * atkbd_interrupt(). Here takes place processing of data received from
 
 346  * the keyboard into events.
 
 349 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
 
 352         struct atkbd *atkbd = serio_get_drvdata(serio);
 
 353         struct input_dev *dev = atkbd->dev;
 
 354         unsigned int code = data;
 
 355         int scroll = 0, hscroll = 0, click = -1, add_release_event = 0;
 
 357         unsigned char keycode;
 
 360         printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
 
 363 #if !defined(__i386__) && !defined (__x86_64__)
 
 364         if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
 
 365                 printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);
 
 366                 serio_write(serio, ATKBD_CMD_RESEND);
 
 371         if (!flags && data == ATKBD_RET_ACK)
 
 375         if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
 
 376                 if  (ps2_handle_ack(&atkbd->ps2dev, data))
 
 379         if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
 
 380                 if  (ps2_handle_response(&atkbd->ps2dev, data))
 
 386         input_event(dev, EV_MSC, MSC_RAW, code);
 
 388         if (atkbd->translated) {
 
 390                 if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
 
 391                         atkbd->release = code >> 7;
 
 396                         atkbd_calculate_xl_bit(atkbd, data);
 
 402                         serio_reconnect(atkbd->ps2dev.serio);
 
 404                 case ATKBD_RET_EMUL0:
 
 407                 case ATKBD_RET_EMUL1:
 
 410                 case ATKBD_RET_RELEASE:
 
 415                         printk(KERN_WARNING "atkbd.c: Spurious %s on %s. "
 
 416                                "Some program might be trying access hardware directly.\n",
 
 417                                data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
 
 419                 case ATKBD_RET_HANGEUL:
 
 420                 case ATKBD_RET_HANJA:
 
 422                          * These keys do not report release and thus need to be
 
 425                         add_release_event = 1;
 
 430                         printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);
 
 435         code = atkbd_compat_scancode(atkbd, code);
 
 437         if (atkbd->emul && --atkbd->emul)
 
 440         keycode = atkbd->keycode[code];
 
 442         if (keycode != ATKBD_KEY_NULL)
 
 443                 input_event(dev, EV_MSC, MSC_SCAN, code);
 
 448                 case ATKBD_KEY_UNKNOWN:
 
 450                                "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n",
 
 451                                atkbd->release ? "released" : "pressed",
 
 452                                atkbd->translated ? "translated" : "raw",
 
 453                                atkbd->set, code, serio->phys);
 
 455                                "atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.\n",
 
 456                                code & 0x80 ? "e0" : "", code & 0x7f);
 
 460                         scroll = 1 - atkbd->release * 2;
 
 463                         scroll = 2 - atkbd->release * 4;
 
 466                         scroll = 4 - atkbd->release * 8;
 
 469                         scroll = 8 - atkbd->release * 16;
 
 471                 case ATKBD_SCR_CLICK:
 
 472                         click = !atkbd->release;
 
 477                 case ATKBD_SCR_RIGHT:
 
 481                         if (atkbd->release) {
 
 484                         } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
 
 485                                 /* Workaround Toshiba laptop multiple keypress */
 
 486                                 value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
 
 490                                 atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
 
 493                         input_event(dev, EV_KEY, keycode, value);
 
 496                         if (value && add_release_event) {
 
 497                                 input_report_key(dev, keycode, 0);
 
 504                         input_report_key(dev, BTN_MIDDLE, click);
 
 505                 input_report_rel(dev, REL_WHEEL, scroll);
 
 506                 input_report_rel(dev, REL_HWHEEL, hscroll);
 
 515 static int atkbd_set_repeat_rate(struct atkbd *atkbd)
 
 517         const short period[32] =
 
 518                 { 33,  37,  42,  46,  50,  54,  58,  63,  67,  75,  83,  92, 100, 109, 116, 125,
 
 519                  133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
 
 520         const short delay[4] =
 
 521                 { 250, 500, 750, 1000 };
 
 523         struct input_dev *dev = atkbd->dev;
 
 527         while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD])
 
 529         dev->rep[REP_PERIOD] = period[i];
 
 531         while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY])
 
 533         dev->rep[REP_DELAY] = delay[j];
 
 535         param = i | (j << 5);
 
 536         return ps2_command(&atkbd->ps2dev, ¶m, ATKBD_CMD_SETREP);
 
 539 static int atkbd_set_leds(struct atkbd *atkbd)
 
 541         struct input_dev *dev = atkbd->dev;
 
 542         unsigned char param[2];
 
 544         param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
 
 545                  | (test_bit(LED_NUML,    dev->led) ? 2 : 0)
 
 546                  | (test_bit(LED_CAPSL,   dev->led) ? 4 : 0);
 
 547         if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
 
 552                 param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
 
 553                          | (test_bit(LED_SLEEP,   dev->led) ? 0x02 : 0)
 
 554                          | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
 
 555                          | (test_bit(LED_MISC,    dev->led) ? 0x10 : 0)
 
 556                          | (test_bit(LED_MUTE,    dev->led) ? 0x20 : 0);
 
 557                 if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
 
 565  * atkbd_event_work() is used to complete processing of events that
 
 566  * can not be processed by input_event() which is often called from
 
 570 static void atkbd_event_work(struct work_struct *work)
 
 572         struct atkbd *atkbd = container_of(work, struct atkbd, event_work);
 
 574         mutex_lock(&atkbd->event_mutex);
 
 576         if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
 
 577                 atkbd_set_leds(atkbd);
 
 579         if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
 
 580                 atkbd_set_repeat_rate(atkbd);
 
 582         mutex_unlock(&atkbd->event_mutex);
 
 586  * Event callback from the input module. Events that change the state of
 
 587  * the hardware are processed here. If action can not be performed in
 
 588  * interrupt context it is offloaded to atkbd_event_work.
 
 591 static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
 
 593         struct atkbd *atkbd = dev->private;
 
 601                         set_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask);
 
 603                         schedule_work(&atkbd->event_work);
 
 608                         if (!atkbd->softrepeat) {
 
 609                                 set_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask);
 
 611                                 schedule_work(&atkbd->event_work);
 
 621  * atkbd_enable() signals that interrupt handler is allowed to
 
 622  * generate input events.
 
 625 static inline void atkbd_enable(struct atkbd *atkbd)
 
 627         serio_pause_rx(atkbd->ps2dev.serio);
 
 629         serio_continue_rx(atkbd->ps2dev.serio);
 
 633  * atkbd_disable() tells input handler that all incoming data except
 
 634  * for ACKs and command response should be dropped.
 
 637 static inline void atkbd_disable(struct atkbd *atkbd)
 
 639         serio_pause_rx(atkbd->ps2dev.serio);
 
 641         serio_continue_rx(atkbd->ps2dev.serio);
 
 645  * atkbd_probe() probes for an AT keyboard on a serio port.
 
 648 static int atkbd_probe(struct atkbd *atkbd)
 
 650         struct ps2dev *ps2dev = &atkbd->ps2dev;
 
 651         unsigned char param[2];
 
 654  * Some systems, where the bit-twiddling when testing the io-lines of the
 
 655  * controller may confuse the keyboard need a full reset of the keyboard. On
 
 656  * these systems the BIOS also usually doesn't do it for us.
 
 660                 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
 
 661                         printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", ps2dev->serio->phys);
 
 664  * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
 
 665  * Some keyboards report different values, but the first byte is always 0xab or
 
 666  * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
 
 667  * should make sure we don't try to set the LEDs on it.
 
 670         param[0] = param[1] = 0xa5;     /* initialize with invalid values */
 
 671         if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
 
 674  * If the get ID command failed, we check if we can at least set the LEDs on
 
 675  * the keyboard. This should work on every keyboard out there. It also turns
 
 676  * the LEDs off, which we want anyway.
 
 679                 if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
 
 685         if (!ps2_is_keyboard_id(param[0]))
 
 688         atkbd->id = (param[0] << 8) | param[1];
 
 690         if (atkbd->id == 0xaca1 && atkbd->translated) {
 
 691                 printk(KERN_ERR "atkbd.c: NCD terminal keyboards are only supported on non-translating\n");
 
 692                 printk(KERN_ERR "atkbd.c: controllers. Use i8042.direct=1 to disable translation.\n");
 
 700  * atkbd_select_set checks if a keyboard has a working Set 3 support, and
 
 701  * sets it into that. Unfortunately there are keyboards that can be switched
 
 702  * to Set 3, but don't work well in that (BTC Multimedia ...)
 
 705 static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
 
 707         struct ps2dev *ps2dev = &atkbd->ps2dev;
 
 708         unsigned char param[2];
 
 712  * For known special keyboards we can go ahead and set the correct set.
 
 713  * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
 
 714  * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
 
 717         if (atkbd->translated)
 
 720         if (atkbd->id == 0xaca1) {
 
 722                 ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
 
 728                 if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
 
 737         if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
 
 738                 atkbd->id = param[0] << 8 | param[1];
 
 743         if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
 
 747         if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
 
 752                 if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
 
 756         ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
 
 761 static int atkbd_activate(struct atkbd *atkbd)
 
 763         struct ps2dev *ps2dev = &atkbd->ps2dev;
 
 764         unsigned char param[1];
 
 767  * Set the LEDs to a defined state.
 
 771         if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
 
 775  * Set autorepeat to fastest possible.
 
 779         if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
 
 783  * Enable the keyboard to receive keystrokes.
 
 786         if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
 
 787                 printk(KERN_ERR "atkbd.c: Failed to enable keyboard on %s\n",
 
 788                         ps2dev->serio->phys);
 
 796  * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
 
 800 static void atkbd_cleanup(struct serio *serio)
 
 802         struct atkbd *atkbd = serio_get_drvdata(serio);
 
 803         ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
 
 808  * atkbd_disconnect() closes and frees.
 
 811 static void atkbd_disconnect(struct serio *serio)
 
 813         struct atkbd *atkbd = serio_get_drvdata(serio);
 
 815         atkbd_disable(atkbd);
 
 817         /* make sure we don't have a command in flight */
 
 818         synchronize_sched();  /* Allow atkbd_interrupt()s to complete. */
 
 819         flush_scheduled_work();
 
 821         sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
 
 822         input_unregister_device(atkbd->dev);
 
 824         serio_set_drvdata(serio, NULL);
 
 830  * atkbd_set_keycode_table() initializes keyboard's keycode table
 
 831  * according to the selected scancode set
 
 834 static void atkbd_set_keycode_table(struct atkbd *atkbd)
 
 838         memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
 
 840         if (atkbd->translated) {
 
 841                 for (i = 0; i < 128; i++) {
 
 842                         atkbd->keycode[i] = atkbd_set2_keycode[atkbd_unxlate_table[i]];
 
 843                         atkbd->keycode[i | 0x80] = atkbd_set2_keycode[atkbd_unxlate_table[i] | 0x80];
 
 845                                 for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
 
 846                                         if ((atkbd_unxlate_table[i] | 0x80) == atkbd_scroll_keys[j].set2)
 
 847                                                 atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
 
 849         } else if (atkbd->set == 3) {
 
 850                 memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
 
 852                 memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
 
 855                         for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++)
 
 856                                 atkbd->keycode[atkbd_scroll_keys[i].set2] = atkbd_scroll_keys[i].keycode;
 
 859         atkbd->keycode[atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL)] = KEY_HANGUEL;
 
 860         atkbd->keycode[atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA)] = KEY_HANJA;
 
 864  * atkbd_set_device_attrs() sets up keyboard's input device structure
 
 867 static void atkbd_set_device_attrs(struct atkbd *atkbd)
 
 869         struct input_dev *input_dev = atkbd->dev;
 
 873                 snprintf(atkbd->name, sizeof(atkbd->name),
 
 874                          "AT Set 2 Extra keyboard");
 
 876                 snprintf(atkbd->name, sizeof(atkbd->name),
 
 877                          "AT %s Set %d keyboard",
 
 878                          atkbd->translated ? "Translated" : "Raw", atkbd->set);
 
 880         snprintf(atkbd->phys, sizeof(atkbd->phys),
 
 881                  "%s/input0", atkbd->ps2dev.serio->phys);
 
 883         input_dev->name = atkbd->name;
 
 884         input_dev->phys = atkbd->phys;
 
 885         input_dev->id.bustype = BUS_I8042;
 
 886         input_dev->id.vendor = 0x0001;
 
 887         input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
 
 888         input_dev->id.version = atkbd->id;
 
 889         input_dev->event = atkbd_event;
 
 890         input_dev->private = atkbd;
 
 891         input_dev->cdev.dev = &atkbd->ps2dev.serio->dev;
 
 893         input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_MSC);
 
 896                 input_dev->evbit[0] |= BIT(EV_LED);
 
 897                 input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
 
 901                 input_dev->ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) |
 
 902                                         BIT(LED_SLEEP) | BIT(LED_MUTE) | BIT(LED_MISC);
 
 904         if (!atkbd->softrepeat) {
 
 905                 input_dev->rep[REP_DELAY] = 250;
 
 906                 input_dev->rep[REP_PERIOD] = 33;
 
 909         input_dev->mscbit[0] = atkbd->softraw ? BIT(MSC_SCAN) : BIT(MSC_RAW) | BIT(MSC_SCAN);
 
 912                 input_dev->evbit[0] |= BIT(EV_REL);
 
 913                 input_dev->relbit[0] = BIT(REL_WHEEL) | BIT(REL_HWHEEL);
 
 914                 set_bit(BTN_MIDDLE, input_dev->keybit);
 
 917         input_dev->keycode = atkbd->keycode;
 
 918         input_dev->keycodesize = sizeof(unsigned char);
 
 919         input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
 
 921         for (i = 0; i < 512; i++)
 
 922                 if (atkbd->keycode[i] && atkbd->keycode[i] < ATKBD_SPECIAL)
 
 923                         set_bit(atkbd->keycode[i], input_dev->keybit);
 
 927  * atkbd_connect() is called when the serio module finds an interface
 
 928  * that isn't handled yet by an appropriate device driver. We check if
 
 929  * there is an AT keyboard out there and if yes, we register ourselves
 
 930  * to the input module.
 
 933 static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
 
 936         struct input_dev *dev;
 
 939         atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
 
 940         dev = input_allocate_device();
 
 945         ps2_init(&atkbd->ps2dev, serio);
 
 946         INIT_WORK(&atkbd->event_work, atkbd_event_work);
 
 947         mutex_init(&atkbd->event_mutex);
 
 949         switch (serio->id.type) {
 
 952                         atkbd->translated = 1;
 
 959         atkbd->softraw = atkbd_softraw;
 
 960         atkbd->softrepeat = atkbd_softrepeat;
 
 961         atkbd->scroll = atkbd_scroll;
 
 963         if (atkbd->softrepeat)
 
 966         serio_set_drvdata(serio, atkbd);
 
 968         err = serio_open(serio, drv);
 
 974                 if (atkbd_probe(atkbd)) {
 
 979                 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
 
 980                 atkbd_activate(atkbd);
 
 987         atkbd_set_keycode_table(atkbd);
 
 988         atkbd_set_device_attrs(atkbd);
 
 990         err = sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group);
 
 996         err = input_register_device(atkbd->dev);
 
1002  fail4: sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
 
1003  fail3: serio_close(serio);
 
1004  fail2: serio_set_drvdata(serio, NULL);
 
1005  fail1: input_free_device(dev);
 
1011  * atkbd_reconnect() tries to restore keyboard into a sane state and is
 
1012  * most likely called on resume.
 
1015 static int atkbd_reconnect(struct serio *serio)
 
1017         struct atkbd *atkbd = serio_get_drvdata(serio);
 
1018         struct serio_driver *drv = serio->drv;
 
1020         if (!atkbd || !drv) {
 
1021                 printk(KERN_DEBUG "atkbd: reconnect request, but serio is disconnected, ignoring...\n");
 
1025         atkbd_disable(atkbd);
 
1028                 if (atkbd_probe(atkbd))
 
1030                 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
 
1033                 atkbd_activate(atkbd);
 
1036  * Restore repeat rate and LEDs (that were reset by atkbd_activate)
 
1037  * to pre-resume state
 
1039                 if (!atkbd->softrepeat)
 
1040                         atkbd_set_repeat_rate(atkbd);
 
1041                 atkbd_set_leds(atkbd);
 
1044         atkbd_enable(atkbd);
 
1049 static struct serio_device_id atkbd_serio_ids[] = {
 
1057                 .type   = SERIO_8042_XL,
 
1063                 .type   = SERIO_RS232,
 
1064                 .proto  = SERIO_PS2SER,
 
1071 MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
 
1073 static struct serio_driver atkbd_drv = {
 
1077         .description    = DRIVER_DESC,
 
1078         .id_table       = atkbd_serio_ids,
 
1079         .interrupt      = atkbd_interrupt,
 
1080         .connect        = atkbd_connect,
 
1081         .reconnect      = atkbd_reconnect,
 
1082         .disconnect     = atkbd_disconnect,
 
1083         .cleanup        = atkbd_cleanup,
 
1086 static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
 
1087                                 ssize_t (*handler)(struct atkbd *, char *))
 
1089         struct serio *serio = to_serio_port(dev);
 
1092         retval = serio_pin_driver(serio);
 
1096         if (serio->drv != &atkbd_drv) {
 
1101         retval = handler((struct atkbd *)serio_get_drvdata(serio), buf);
 
1104         serio_unpin_driver(serio);
 
1108 static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
 
1109                                 ssize_t (*handler)(struct atkbd *, const char *, size_t))
 
1111         struct serio *serio = to_serio_port(dev);
 
1112         struct atkbd *atkbd;
 
1115         retval = serio_pin_driver(serio);
 
1119         if (serio->drv != &atkbd_drv) {
 
1124         atkbd = serio_get_drvdata(serio);
 
1125         atkbd_disable(atkbd);
 
1126         retval = handler(atkbd, buf, count);
 
1127         atkbd_enable(atkbd);
 
1130         serio_unpin_driver(serio);
 
1134 static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
 
1136         return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
 
1139 static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
 
1141         struct input_dev *old_dev, *new_dev;
 
1142         unsigned long value;
 
1145         unsigned char old_extra, old_set;
 
1150         value = simple_strtoul(buf, &rest, 10);
 
1151         if (*rest || value > 1)
 
1154         if (atkbd->extra != value) {
 
1156                  * Since device's properties will change we need to
 
1157                  * unregister old device. But allocate and register
 
1158                  * new one first to make sure we have it.
 
1160                 old_dev = atkbd->dev;
 
1161                 old_extra = atkbd->extra;
 
1162                 old_set = atkbd->set;
 
1164                 new_dev = input_allocate_device();
 
1168                 atkbd->dev = new_dev;
 
1169                 atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
 
1170                 atkbd_activate(atkbd);
 
1171                 atkbd_set_keycode_table(atkbd);
 
1172                 atkbd_set_device_attrs(atkbd);
 
1174                 err = input_register_device(atkbd->dev);
 
1176                         input_free_device(new_dev);
 
1178                         atkbd->dev = old_dev;
 
1179                         atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
 
1180                         atkbd_set_keycode_table(atkbd);
 
1181                         atkbd_set_device_attrs(atkbd);
 
1185                 input_unregister_device(old_dev);
 
1191 static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
 
1193         return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
 
1196 static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
 
1198         struct input_dev *old_dev, *new_dev;
 
1199         unsigned long value;
 
1202         unsigned char old_scroll;
 
1204         value = simple_strtoul(buf, &rest, 10);
 
1205         if (*rest || value > 1)
 
1208         if (atkbd->scroll != value) {
 
1209                 old_dev = atkbd->dev;
 
1210                 old_scroll = atkbd->scroll;
 
1212                 new_dev = input_allocate_device();
 
1216                 atkbd->dev = new_dev;
 
1217                 atkbd->scroll = value;
 
1218                 atkbd_set_keycode_table(atkbd);
 
1219                 atkbd_set_device_attrs(atkbd);
 
1221                 err = input_register_device(atkbd->dev);
 
1223                         input_free_device(new_dev);
 
1225                         atkbd->scroll = old_scroll;
 
1226                         atkbd->dev = old_dev;
 
1227                         atkbd_set_keycode_table(atkbd);
 
1228                         atkbd_set_device_attrs(atkbd);
 
1232                 input_unregister_device(old_dev);
 
1237 static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
 
1239         return sprintf(buf, "%d\n", atkbd->set);
 
1242 static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
 
1244         struct input_dev *old_dev, *new_dev;
 
1245         unsigned long value;
 
1248         unsigned char old_set, old_extra;
 
1253         value = simple_strtoul(buf, &rest, 10);
 
1254         if (*rest || (value != 2 && value != 3))
 
1257         if (atkbd->set != value) {
 
1258                 old_dev = atkbd->dev;
 
1259                 old_extra = atkbd->extra;
 
1260                 old_set = atkbd->set;
 
1262                 new_dev = input_allocate_device();
 
1266                 atkbd->dev = new_dev;
 
1267                 atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
 
1268                 atkbd_activate(atkbd);
 
1269                 atkbd_set_keycode_table(atkbd);
 
1270                 atkbd_set_device_attrs(atkbd);
 
1272                 err = input_register_device(atkbd->dev);
 
1274                         input_free_device(new_dev);
 
1276                         atkbd->dev = old_dev;
 
1277                         atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
 
1278                         atkbd_set_keycode_table(atkbd);
 
1279                         atkbd_set_device_attrs(atkbd);
 
1283                 input_unregister_device(old_dev);
 
1288 static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
 
1290         return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
 
1293 static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
 
1295         struct input_dev *old_dev, *new_dev;
 
1296         unsigned long value;
 
1299         unsigned char old_softrepeat, old_softraw;
 
1304         value = simple_strtoul(buf, &rest, 10);
 
1305         if (*rest || value > 1)
 
1308         if (atkbd->softrepeat != value) {
 
1309                 old_dev = atkbd->dev;
 
1310                 old_softrepeat = atkbd->softrepeat;
 
1311                 old_softraw = atkbd->softraw;
 
1313                 new_dev = input_allocate_device();
 
1317                 atkbd->dev = new_dev;
 
1318                 atkbd->softrepeat = value;
 
1319                 if (atkbd->softrepeat)
 
1321                 atkbd_set_device_attrs(atkbd);
 
1323                 err = input_register_device(atkbd->dev);
 
1325                         input_free_device(new_dev);
 
1327                         atkbd->dev = old_dev;
 
1328                         atkbd->softrepeat = old_softrepeat;
 
1329                         atkbd->softraw = old_softraw;
 
1330                         atkbd_set_device_attrs(atkbd);
 
1334                 input_unregister_device(old_dev);
 
1340 static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
 
1342         return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
 
1345 static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
 
1347         struct input_dev *old_dev, *new_dev;
 
1348         unsigned long value;
 
1351         unsigned char old_softraw;
 
1353         value = simple_strtoul(buf, &rest, 10);
 
1354         if (*rest || value > 1)
 
1357         if (atkbd->softraw != value) {
 
1358                 old_dev = atkbd->dev;
 
1359                 old_softraw = atkbd->softraw;
 
1361                 new_dev = input_allocate_device();
 
1365                 atkbd->dev = new_dev;
 
1366                 atkbd->softraw = value;
 
1367                 atkbd_set_device_attrs(atkbd);
 
1369                 err = input_register_device(atkbd->dev);
 
1371                         input_free_device(new_dev);
 
1373                         atkbd->dev = old_dev;
 
1374                         atkbd->softraw = old_softraw;
 
1375                         atkbd_set_device_attrs(atkbd);
 
1379                 input_unregister_device(old_dev);
 
1384 static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
 
1386         return sprintf(buf, "%lu\n", atkbd->err_count);
 
1390 static int __init atkbd_init(void)
 
1392         return serio_register_driver(&atkbd_drv);
 
1395 static void __exit atkbd_exit(void)
 
1397         serio_unregister_driver(&atkbd_drv);
 
1400 module_init(atkbd_init);
 
1401 module_exit(atkbd_exit);