linux/drivers/input/keyboard/atkbd.c
<<
>>
Prefs
   1/*
   2 * AT and PS/2 keyboard driver
   3 *
   4 * Copyright (c) 1999-2002 Vojtech Pavlik
   5 */
   6
   7/*
   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.
  11 */
  12
  13/*
  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
  17 * converter.
  18 */
  19
  20#include <linux/delay.h>
  21#include <linux/module.h>
  22#include <linux/slab.h>
  23#include <linux/interrupt.h>
  24#include <linux/init.h>
  25#include <linux/input.h>
  26#include <linux/serio.h>
  27#include <linux/workqueue.h>
  28#include <linux/libps2.h>
  29#include <linux/mutex.h>
  30#include <linux/dmi.h>
  31
  32#define DRIVER_DESC     "AT and PS/2 keyboard driver"
  33
  34MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
  35MODULE_DESCRIPTION(DRIVER_DESC);
  36MODULE_LICENSE("GPL");
  37
  38static int atkbd_set = 2;
  39module_param_named(set, atkbd_set, int, 0);
  40MODULE_PARM_DESC(set, "Select keyboard code set (2 = default, 3 = PS/2 native)");
  41
  42#if defined(__i386__) || defined(__x86_64__) || defined(__hppa__)
  43static bool atkbd_reset;
  44#else
  45static bool atkbd_reset = true;
  46#endif
  47module_param_named(reset, atkbd_reset, bool, 0);
  48MODULE_PARM_DESC(reset, "Reset keyboard during initialization");
  49
  50static bool atkbd_softrepeat;
  51module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
  52MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
  53
  54static bool atkbd_softraw = true;
  55module_param_named(softraw, atkbd_softraw, bool, 0);
  56MODULE_PARM_DESC(softraw, "Use software generated rawmode");
  57
  58static bool atkbd_scroll;
  59module_param_named(scroll, atkbd_scroll, bool, 0);
  60MODULE_PARM_DESC(scroll, "Enable scroll-wheel on MS Office and similar keyboards");
  61
  62static bool atkbd_extra;
  63module_param_named(extra, atkbd_extra, bool, 0);
  64MODULE_PARM_DESC(extra, "Enable extra LEDs and keys on IBM RapidAcces, EzKey and similar keyboards");
  65
  66static bool atkbd_terminal;
  67module_param_named(terminal, atkbd_terminal, bool, 0);
  68MODULE_PARM_DESC(terminal, "Enable break codes on an IBM Terminal keyboard connected via AT/PS2");
  69
  70/*
  71 * Scancode to keycode tables. These are just the default setting, and
  72 * are loadable via a userland utility.
  73 */
  74
  75#define ATKBD_KEYMAP_SIZE       512
  76
  77static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {
  78
  79#ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
  80
  81/* XXX: need a more general approach */
  82
  83#include "hpps2atkbd.h" /* include the keyboard scancodes */
  84
  85#else
  86          0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
  87          0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
  88          0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
  89          0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
  90          0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
  91          0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
  92          0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
  93         82, 83, 80, 76, 77, 72,  1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
  94
  95          0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  96        217,100,255,  0, 97,165,  0,  0,156,  0,  0,  0,  0,  0,  0,125,
  97        173,114,  0,113,  0,  0,  0,126,128,  0,  0,140,  0,  0,  0,127,
  98        159,  0,115,  0,164,  0,  0,116,158,  0,172,166,  0,  0,  0,142,
  99        157,  0,  0,  0,  0,  0,  0,  0,155,  0, 98,  0,  0,163,  0,  0,
 100        226,  0,  0,  0,  0,  0,  0,  0,  0,255, 96,  0,  0,  0,143,  0,
 101          0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
 102        110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
 103
 104          0,  0,  0, 65, 99,
 105#endif
 106};
 107
 108static const unsigned short atkbd_set3_keycode[ATKBD_KEYMAP_SIZE] = {
 109
 110          0,  0,  0,  0,  0,  0,  0, 59,  1,138,128,129,130, 15, 41, 60,
 111        131, 29, 42, 86, 58, 16,  2, 61,133, 56, 44, 31, 30, 17,  3, 62,
 112        134, 46, 45, 32, 18,  5,  4, 63,135, 57, 47, 33, 20, 19,  6, 64,
 113        136, 49, 48, 35, 34, 21,  7, 65,137,100, 50, 36, 22,  8,  9, 66,
 114        125, 51, 37, 23, 24, 11, 10, 67,126, 52, 53, 38, 39, 25, 12, 68,
 115        113,114, 40, 43, 26, 13, 87, 99, 97, 54, 28, 27, 43, 43, 88, 70,
 116        108,105,119,103,111,107, 14,110,  0, 79,106, 75, 71,109,102,104,
 117         82, 83, 80, 76, 77, 72, 69, 98,  0, 96, 81,  0, 78, 73, 55,183,
 118
 119        184,185,186,187, 74, 94, 92, 93,  0,  0,  0,125,126,127,112,  0,
 120          0,139,172,163,165,115,152,172,166,140,160,154,113,114,167,168,
 121        148,149,147,140
 122};
 123
 124static const unsigned short atkbd_unxlate_table[128] = {
 125          0,118, 22, 30, 38, 37, 46, 54, 61, 62, 70, 69, 78, 85,102, 13,
 126         21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 90, 20, 28, 27,
 127         35, 43, 52, 51, 59, 66, 75, 76, 82, 14, 18, 93, 26, 34, 33, 42,
 128         50, 49, 58, 65, 73, 74, 89,124, 17, 41, 88,  5,  6,  4, 12,  3,
 129         11,  2, 10,  1,  9,119,126,108,117,125,123,107,115,116,121,105,
 130        114,122,112,113,127, 96, 97,120,  7, 15, 23, 31, 39, 47, 55, 63,
 131         71, 79, 86, 94,  8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87,111,
 132         19, 25, 57, 81, 83, 92, 95, 98, 99,100,101,103,104,106,109,110
 133};
 134
 135#define ATKBD_CMD_SETLEDS       0x10ed
 136#define ATKBD_CMD_GSCANSET      0x11f0
 137#define ATKBD_CMD_SSCANSET      0x10f0
 138#define ATKBD_CMD_GETID         0x02f2
 139#define ATKBD_CMD_SETREP        0x10f3
 140#define ATKBD_CMD_ENABLE        0x00f4
 141#define ATKBD_CMD_RESET_DIS     0x00f5  /* Reset to defaults and disable */
 142#define ATKBD_CMD_RESET_DEF     0x00f6  /* Reset to defaults */
 143#define ATKBD_CMD_SETALL_MB     0x00f8  /* Set all keys to give break codes */
 144#define ATKBD_CMD_SETALL_MBR    0x00fa  /* ... and repeat */
 145#define ATKBD_CMD_RESET_BAT     0x02ff
 146#define ATKBD_CMD_RESEND        0x00fe
 147#define ATKBD_CMD_EX_ENABLE     0x10ea
 148#define ATKBD_CMD_EX_SETLEDS    0x20eb
 149#define ATKBD_CMD_OK_GETID      0x02e8
 150
 151#define ATKBD_RET_ACK           0xfa
 152#define ATKBD_RET_NAK           0xfe
 153#define ATKBD_RET_BAT           0xaa
 154#define ATKBD_RET_EMUL0         0xe0
 155#define ATKBD_RET_EMUL1         0xe1
 156#define ATKBD_RET_RELEASE       0xf0
 157#define ATKBD_RET_HANJA         0xf1
 158#define ATKBD_RET_HANGEUL       0xf2
 159#define ATKBD_RET_ERR           0xff
 160
 161#define ATKBD_KEY_UNKNOWN       0
 162#define ATKBD_KEY_NULL          255
 163
 164#define ATKBD_SCR_1             0xfffe
 165#define ATKBD_SCR_2             0xfffd
 166#define ATKBD_SCR_4             0xfffc
 167#define ATKBD_SCR_8             0xfffb
 168#define ATKBD_SCR_CLICK         0xfffa
 169#define ATKBD_SCR_LEFT          0xfff9
 170#define ATKBD_SCR_RIGHT         0xfff8
 171
 172#define ATKBD_SPECIAL           ATKBD_SCR_RIGHT
 173
 174#define ATKBD_LED_EVENT_BIT     0
 175#define ATKBD_REP_EVENT_BIT     1
 176
 177#define ATKBD_XL_ERR            0x01
 178#define ATKBD_XL_BAT            0x02
 179#define ATKBD_XL_ACK            0x04
 180#define ATKBD_XL_NAK            0x08
 181#define ATKBD_XL_HANGEUL        0x10
 182#define ATKBD_XL_HANJA          0x20
 183
 184static const struct {
 185        unsigned short keycode;
 186        unsigned char set2;
 187} atkbd_scroll_keys[] = {
 188        { ATKBD_SCR_1,     0xc5 },
 189        { ATKBD_SCR_2,     0x9d },
 190        { ATKBD_SCR_4,     0xa4 },
 191        { ATKBD_SCR_8,     0x9b },
 192        { ATKBD_SCR_CLICK, 0xe0 },
 193        { ATKBD_SCR_LEFT,  0xcb },
 194        { ATKBD_SCR_RIGHT, 0xd2 },
 195};
 196
 197/*
 198 * The atkbd control structure
 199 */
 200
 201struct atkbd {
 202
 203        struct ps2dev ps2dev;
 204        struct input_dev *dev;
 205
 206        /* Written only during init */
 207        char name[64];
 208        char phys[32];
 209
 210        unsigned short id;
 211        unsigned short keycode[ATKBD_KEYMAP_SIZE];
 212        DECLARE_BITMAP(force_release_mask, ATKBD_KEYMAP_SIZE);
 213        unsigned char set;
 214        bool translated;
 215        bool extra;
 216        bool write;
 217        bool softrepeat;
 218        bool softraw;
 219        bool scroll;
 220        bool enabled;
 221
 222        /* Accessed only from interrupt */
 223        unsigned char emul;
 224        bool resend;
 225        bool release;
 226        unsigned long xl_bit;
 227        unsigned int last;
 228        unsigned long time;
 229        unsigned long err_count;
 230
 231        struct delayed_work event_work;
 232        unsigned long event_jiffies;
 233        unsigned long event_mask;
 234
 235        /* Serializes reconnect(), attr->set() and event work */
 236        struct mutex mutex;
 237};
 238
 239/*
 240 * System-specific keymap fixup routine
 241 */
 242static void (*atkbd_platform_fixup)(struct atkbd *, const void *data);
 243static void *atkbd_platform_fixup_data;
 244static unsigned int (*atkbd_platform_scancode_fixup)(struct atkbd *, unsigned int);
 245
 246static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
 247                                ssize_t (*handler)(struct atkbd *, char *));
 248static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
 249                                ssize_t (*handler)(struct atkbd *, const char *, size_t));
 250#define ATKBD_DEFINE_ATTR(_name)                                                \
 251static ssize_t atkbd_show_##_name(struct atkbd *, char *);                      \
 252static ssize_t atkbd_set_##_name(struct atkbd *, const char *, size_t);         \
 253static ssize_t atkbd_do_show_##_name(struct device *d,                          \
 254                                struct device_attribute *attr, char *b)         \
 255{                                                                               \
 256        return atkbd_attr_show_helper(d, b, atkbd_show_##_name);                \
 257}                                                                               \
 258static ssize_t atkbd_do_set_##_name(struct device *d,                           \
 259                        struct device_attribute *attr, const char *b, size_t s) \
 260{                                                                               \
 261        return atkbd_attr_set_helper(d, b, s, atkbd_set_##_name);               \
 262}                                                                               \
 263static struct device_attribute atkbd_attr_##_name =                             \
 264        __ATTR(_name, S_IWUSR | S_IRUGO, atkbd_do_show_##_name, atkbd_do_set_##_name);
 265
 266ATKBD_DEFINE_ATTR(extra);
 267ATKBD_DEFINE_ATTR(force_release);
 268ATKBD_DEFINE_ATTR(scroll);
 269ATKBD_DEFINE_ATTR(set);
 270ATKBD_DEFINE_ATTR(softrepeat);
 271ATKBD_DEFINE_ATTR(softraw);
 272
 273#define ATKBD_DEFINE_RO_ATTR(_name)                                             \
 274static ssize_t atkbd_show_##_name(struct atkbd *, char *);                      \
 275static ssize_t atkbd_do_show_##_name(struct device *d,                          \
 276                                struct device_attribute *attr, char *b)         \
 277{                                                                               \
 278        return atkbd_attr_show_helper(d, b, atkbd_show_##_name);                \
 279}                                                                               \
 280static struct device_attribute atkbd_attr_##_name =                             \
 281        __ATTR(_name, S_IRUGO, atkbd_do_show_##_name, NULL);
 282
 283ATKBD_DEFINE_RO_ATTR(err_count);
 284
 285static struct attribute *atkbd_attributes[] = {
 286        &atkbd_attr_extra.attr,
 287        &atkbd_attr_force_release.attr,
 288        &atkbd_attr_scroll.attr,
 289        &atkbd_attr_set.attr,
 290        &atkbd_attr_softrepeat.attr,
 291        &atkbd_attr_softraw.attr,
 292        &atkbd_attr_err_count.attr,
 293        NULL
 294};
 295
 296static struct attribute_group atkbd_attribute_group = {
 297        .attrs  = atkbd_attributes,
 298};
 299
 300static const unsigned int xl_table[] = {
 301        ATKBD_RET_BAT, ATKBD_RET_ERR, ATKBD_RET_ACK,
 302        ATKBD_RET_NAK, ATKBD_RET_HANJA, ATKBD_RET_HANGEUL,
 303};
 304
 305/*
 306 * Checks if we should mangle the scancode to extract 'release' bit
 307 * in translated mode.
 308 */
 309static bool atkbd_need_xlate(unsigned long xl_bit, unsigned char code)
 310{
 311        int i;
 312
 313        if (code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1)
 314                return false;
 315
 316        for (i = 0; i < ARRAY_SIZE(xl_table); i++)
 317                if (code == xl_table[i])
 318                        return test_bit(i, &xl_bit);
 319
 320        return true;
 321}
 322
 323/*
 324 * Calculates new value of xl_bit so the driver can distinguish
 325 * between make/break pair of scancodes for select keys and PS/2
 326 * protocol responses.
 327 */
 328static void atkbd_calculate_xl_bit(struct atkbd *atkbd, unsigned char code)
 329{
 330        int i;
 331
 332        for (i = 0; i < ARRAY_SIZE(xl_table); i++) {
 333                if (!((code ^ xl_table[i]) & 0x7f)) {
 334                        if (code & 0x80)
 335                                __clear_bit(i, &atkbd->xl_bit);
 336                        else
 337                                __set_bit(i, &atkbd->xl_bit);
 338                        break;
 339                }
 340        }
 341}
 342
 343/*
 344 * Encode the scancode, 0xe0 prefix, and high bit into a single integer,
 345 * keeping kernel 2.4 compatibility for set 2
 346 */
 347static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code)
 348{
 349        if (atkbd->set == 3) {
 350                if (atkbd->emul == 1)
 351                        code |= 0x100;
 352        } else {
 353                code = (code & 0x7f) | ((code & 0x80) << 1);
 354                if (atkbd->emul == 1)
 355                        code |= 0x80;
 356        }
 357
 358        return code;
 359}
 360
 361/*
 362 * atkbd_interrupt(). Here takes place processing of data received from
 363 * the keyboard into events.
 364 */
 365
 366static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
 367                                   unsigned int flags)
 368{
 369        struct atkbd *atkbd = serio_get_drvdata(serio);
 370        struct input_dev *dev = atkbd->dev;
 371        unsigned int code = data;
 372        int scroll = 0, hscroll = 0, click = -1;
 373        int value;
 374        unsigned short keycode;
 375
 376        dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, flags);
 377
 378#if !defined(__i386__) && !defined (__x86_64__)
 379        if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
 380                dev_warn(&serio->dev, "Frame/parity error: %02x\n", flags);
 381                serio_write(serio, ATKBD_CMD_RESEND);
 382                atkbd->resend = true;
 383                goto out;
 384        }
 385
 386        if (!flags && data == ATKBD_RET_ACK)
 387                atkbd->resend = false;
 388#endif
 389
 390        if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
 391                if  (ps2_handle_ack(&atkbd->ps2dev, data))
 392                        goto out;
 393
 394        if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
 395                if  (ps2_handle_response(&atkbd->ps2dev, data))
 396                        goto out;
 397
 398        if (!atkbd->enabled)
 399                goto out;
 400
 401        input_event(dev, EV_MSC, MSC_RAW, code);
 402
 403        if (atkbd_platform_scancode_fixup)
 404                code = atkbd_platform_scancode_fixup(atkbd, code);
 405
 406        if (atkbd->translated) {
 407
 408                if (atkbd->emul || atkbd_need_xlate(atkbd->xl_bit, code)) {
 409                        atkbd->release = code >> 7;
 410                        code &= 0x7f;
 411                }
 412
 413                if (!atkbd->emul)
 414                        atkbd_calculate_xl_bit(atkbd, data);
 415        }
 416
 417        switch (code) {
 418        case ATKBD_RET_BAT:
 419                atkbd->enabled = false;
 420                serio_reconnect(atkbd->ps2dev.serio);
 421                goto out;
 422        case ATKBD_RET_EMUL0:
 423                atkbd->emul = 1;
 424                goto out;
 425        case ATKBD_RET_EMUL1:
 426                atkbd->emul = 2;
 427                goto out;
 428        case ATKBD_RET_RELEASE:
 429                atkbd->release = true;
 430                goto out;
 431        case ATKBD_RET_ACK:
 432        case ATKBD_RET_NAK:
 433                if (printk_ratelimit())
 434                        dev_warn(&serio->dev,
 435                                 "Spurious %s on %s. "
 436                                 "Some program might be trying to access hardware directly.\n",
 437                                 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
 438                goto out;
 439        case ATKBD_RET_ERR:
 440                atkbd->err_count++;
 441                dev_dbg(&serio->dev, "Keyboard on %s reports too many keys pressed.\n",
 442                        serio->phys);
 443                goto out;
 444        }
 445
 446        code = atkbd_compat_scancode(atkbd, code);
 447
 448        if (atkbd->emul && --atkbd->emul)
 449                goto out;
 450
 451        keycode = atkbd->keycode[code];
 452
 453        if (keycode != ATKBD_KEY_NULL)
 454                input_event(dev, EV_MSC, MSC_SCAN, code);
 455
 456        switch (keycode) {
 457        case ATKBD_KEY_NULL:
 458                break;
 459        case ATKBD_KEY_UNKNOWN:
 460                dev_warn(&serio->dev,
 461                         "Unknown key %s (%s set %d, code %#x on %s).\n",
 462                         atkbd->release ? "released" : "pressed",
 463                         atkbd->translated ? "translated" : "raw",
 464                         atkbd->set, code, serio->phys);
 465                dev_warn(&serio->dev,
 466                         "Use 'setkeycodes %s%02x <keycode>' to make it known.\n",
 467                         code & 0x80 ? "e0" : "", code & 0x7f);
 468                input_sync(dev);
 469                break;
 470        case ATKBD_SCR_1:
 471                scroll = 1;
 472                break;
 473        case ATKBD_SCR_2:
 474                scroll = 2;
 475                break;
 476        case ATKBD_SCR_4:
 477                scroll = 4;
 478                break;
 479        case ATKBD_SCR_8:
 480                scroll = 8;
 481                break;
 482        case ATKBD_SCR_CLICK:
 483                click = !atkbd->release;
 484                break;
 485        case ATKBD_SCR_LEFT:
 486                hscroll = -1;
 487                break;
 488        case ATKBD_SCR_RIGHT:
 489                hscroll = 1;
 490                break;
 491        default:
 492                if (atkbd->release) {
 493                        value = 0;
 494                        atkbd->last = 0;
 495                } else if (!atkbd->softrepeat && test_bit(keycode, dev->key)) {
 496                        /* Workaround Toshiba laptop multiple keypress */
 497                        value = time_before(jiffies, atkbd->time) && atkbd->last == code ? 1 : 2;
 498                } else {
 499                        value = 1;
 500                        atkbd->last = code;
 501                        atkbd->time = jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]) / 2;
 502                }
 503
 504                input_event(dev, EV_KEY, keycode, value);
 505                input_sync(dev);
 506
 507                if (value && test_bit(code, atkbd->force_release_mask)) {
 508                        input_report_key(dev, keycode, 0);
 509                        input_sync(dev);
 510                }
 511        }
 512
 513        if (atkbd->scroll) {
 514                if (click != -1)
 515                        input_report_key(dev, BTN_MIDDLE, click);
 516                input_report_rel(dev, REL_WHEEL,
 517                                 atkbd->release ? -scroll : scroll);
 518                input_report_rel(dev, REL_HWHEEL, hscroll);
 519                input_sync(dev);
 520        }
 521
 522        atkbd->release = false;
 523out:
 524        return IRQ_HANDLED;
 525}
 526
 527static int atkbd_set_repeat_rate(struct atkbd *atkbd)
 528{
 529        const short period[32] =
 530                { 33,  37,  42,  46,  50,  54,  58,  63,  67,  75,  83,  92, 100, 109, 116, 125,
 531                 133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
 532        const short delay[4] =
 533                { 250, 500, 750, 1000 };
 534
 535        struct input_dev *dev = atkbd->dev;
 536        unsigned char param;
 537        int i = 0, j = 0;
 538
 539        while (i < ARRAY_SIZE(period) - 1 && period[i] < dev->rep[REP_PERIOD])
 540                i++;
 541        dev->rep[REP_PERIOD] = period[i];
 542
 543        while (j < ARRAY_SIZE(delay) - 1 && delay[j] < dev->rep[REP_DELAY])
 544                j++;
 545        dev->rep[REP_DELAY] = delay[j];
 546
 547        param = i | (j << 5);
 548        return ps2_command(&atkbd->ps2dev, &param, ATKBD_CMD_SETREP);
 549}
 550
 551static int atkbd_set_leds(struct atkbd *atkbd)
 552{
 553        struct input_dev *dev = atkbd->dev;
 554        unsigned char param[2];
 555
 556        param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
 557                 | (test_bit(LED_NUML,    dev->led) ? 2 : 0)
 558                 | (test_bit(LED_CAPSL,   dev->led) ? 4 : 0);
 559        if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS))
 560                return -1;
 561
 562        if (atkbd->extra) {
 563                param[0] = 0;
 564                param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
 565                         | (test_bit(LED_SLEEP,   dev->led) ? 0x02 : 0)
 566                         | (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
 567                         | (test_bit(LED_MISC,    dev->led) ? 0x10 : 0)
 568                         | (test_bit(LED_MUTE,    dev->led) ? 0x20 : 0);
 569                if (ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS))
 570                        return -1;
 571        }
 572
 573        return 0;
 574}
 575
 576/*
 577 * atkbd_event_work() is used to complete processing of events that
 578 * can not be processed by input_event() which is often called from
 579 * interrupt context.
 580 */
 581
 582static void atkbd_event_work(struct work_struct *work)
 583{
 584        struct atkbd *atkbd = container_of(work, struct atkbd, event_work.work);
 585
 586        mutex_lock(&atkbd->mutex);
 587
 588        if (!atkbd->enabled) {
 589                /*
 590                 * Serio ports are resumed asynchronously so while driver core
 591                 * thinks that device is already fully operational in reality
 592                 * it may not be ready yet. In this case we need to keep
 593                 * rescheduling till reconnect completes.
 594                 */
 595                schedule_delayed_work(&atkbd->event_work,
 596                                        msecs_to_jiffies(100));
 597        } else {
 598                if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask))
 599                        atkbd_set_leds(atkbd);
 600
 601                if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask))
 602                        atkbd_set_repeat_rate(atkbd);
 603        }
 604
 605        mutex_unlock(&atkbd->mutex);
 606}
 607
 608/*
 609 * Schedule switch for execution. We need to throttle requests,
 610 * otherwise keyboard may become unresponsive.
 611 */
 612static void atkbd_schedule_event_work(struct atkbd *atkbd, int event_bit)
 613{
 614        unsigned long delay = msecs_to_jiffies(50);
 615
 616        if (time_after(jiffies, atkbd->event_jiffies + delay))
 617                delay = 0;
 618
 619        atkbd->event_jiffies = jiffies;
 620        set_bit(event_bit, &atkbd->event_mask);
 621        mb();
 622        schedule_delayed_work(&atkbd->event_work, delay);
 623}
 624
 625/*
 626 * Event callback from the input module. Events that change the state of
 627 * the hardware are processed here. If action can not be performed in
 628 * interrupt context it is offloaded to atkbd_event_work.
 629 */
 630
 631static int atkbd_event(struct input_dev *dev,
 632                        unsigned int type, unsigned int code, int value)
 633{
 634        struct atkbd *atkbd = input_get_drvdata(dev);
 635
 636        if (!atkbd->write)
 637                return -1;
 638
 639        switch (type) {
 640
 641        case EV_LED:
 642                atkbd_schedule_event_work(atkbd, ATKBD_LED_EVENT_BIT);
 643                return 0;
 644
 645        case EV_REP:
 646                if (!atkbd->softrepeat)
 647                        atkbd_schedule_event_work(atkbd, ATKBD_REP_EVENT_BIT);
 648                return 0;
 649
 650        default:
 651                return -1;
 652        }
 653}
 654
 655/*
 656 * atkbd_enable() signals that interrupt handler is allowed to
 657 * generate input events.
 658 */
 659
 660static inline void atkbd_enable(struct atkbd *atkbd)
 661{
 662        serio_pause_rx(atkbd->ps2dev.serio);
 663        atkbd->enabled = true;
 664        serio_continue_rx(atkbd->ps2dev.serio);
 665}
 666
 667/*
 668 * atkbd_disable() tells input handler that all incoming data except
 669 * for ACKs and command response should be dropped.
 670 */
 671
 672static inline void atkbd_disable(struct atkbd *atkbd)
 673{
 674        serio_pause_rx(atkbd->ps2dev.serio);
 675        atkbd->enabled = false;
 676        serio_continue_rx(atkbd->ps2dev.serio);
 677}
 678
 679static int atkbd_activate(struct atkbd *atkbd)
 680{
 681        struct ps2dev *ps2dev = &atkbd->ps2dev;
 682
 683/*
 684 * Enable the keyboard to receive keystrokes.
 685 */
 686
 687        if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
 688                dev_err(&ps2dev->serio->dev,
 689                        "Failed to enable keyboard on %s\n",
 690                        ps2dev->serio->phys);
 691                return -1;
 692        }
 693
 694        return 0;
 695}
 696
 697/*
 698 * atkbd_deactivate() resets and disables the keyboard from sending
 699 * keystrokes.
 700 */
 701
 702static void atkbd_deactivate(struct atkbd *atkbd)
 703{
 704        struct ps2dev *ps2dev = &atkbd->ps2dev;
 705
 706        if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_DIS))
 707                dev_err(&ps2dev->serio->dev,
 708                        "Failed to deactivate keyboard on %s\n",
 709                        ps2dev->serio->phys);
 710}
 711
 712/*
 713 * atkbd_probe() probes for an AT keyboard on a serio port.
 714 */
 715
 716static int atkbd_probe(struct atkbd *atkbd)
 717{
 718        struct ps2dev *ps2dev = &atkbd->ps2dev;
 719        unsigned char param[2];
 720
 721/*
 722 * Some systems, where the bit-twiddling when testing the io-lines of the
 723 * controller may confuse the keyboard need a full reset of the keyboard. On
 724 * these systems the BIOS also usually doesn't do it for us.
 725 */
 726
 727        if (atkbd_reset)
 728                if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_BAT))
 729                        dev_warn(&ps2dev->serio->dev,
 730                                 "keyboard reset failed on %s\n",
 731                                 ps2dev->serio->phys);
 732
 733/*
 734 * Then we check the keyboard ID. We should get 0xab83 under normal conditions.
 735 * Some keyboards report different values, but the first byte is always 0xab or
 736 * 0xac. Some old AT keyboards don't report anything. If a mouse is connected, this
 737 * should make sure we don't try to set the LEDs on it.
 738 */
 739
 740        param[0] = param[1] = 0xa5;     /* initialize with invalid values */
 741        if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
 742
 743/*
 744 * If the get ID command failed, we check if we can at least set the LEDs on
 745 * the keyboard. This should work on every keyboard out there. It also turns
 746 * the LEDs off, which we want anyway.
 747 */
 748                param[0] = 0;
 749                if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
 750                        return -1;
 751                atkbd->id = 0xabba;
 752                return 0;
 753        }
 754
 755        if (!ps2_is_keyboard_id(param[0]))
 756                return -1;
 757
 758        atkbd->id = (param[0] << 8) | param[1];
 759
 760        if (atkbd->id == 0xaca1 && atkbd->translated) {
 761                dev_err(&ps2dev->serio->dev,
 762                        "NCD terminal keyboards are only supported on non-translating controllers. "
 763                        "Use i8042.direct=1 to disable translation.\n");
 764                return -1;
 765        }
 766
 767/*
 768 * Make sure nothing is coming from the keyboard and disturbs our
 769 * internal state.
 770 */
 771        atkbd_deactivate(atkbd);
 772
 773        return 0;
 774}
 775
 776/*
 777 * atkbd_select_set checks if a keyboard has a working Set 3 support, and
 778 * sets it into that. Unfortunately there are keyboards that can be switched
 779 * to Set 3, but don't work well in that (BTC Multimedia ...)
 780 */
 781
 782static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra)
 783{
 784        struct ps2dev *ps2dev = &atkbd->ps2dev;
 785        unsigned char param[2];
 786
 787        atkbd->extra = false;
 788/*
 789 * For known special keyboards we can go ahead and set the correct set.
 790 * We check for NCD PS/2 Sun, NorthGate OmniKey 101 and
 791 * IBM RapidAccess / IBM EzButton / Chicony KBP-8993 keyboards.
 792 */
 793
 794        if (atkbd->translated)
 795                return 2;
 796
 797        if (atkbd->id == 0xaca1) {
 798                param[0] = 3;
 799                ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET);
 800                return 3;
 801        }
 802
 803        if (allow_extra) {
 804                param[0] = 0x71;
 805                if (!ps2_command(ps2dev, param, ATKBD_CMD_EX_ENABLE)) {
 806                        atkbd->extra = true;
 807                        return 2;
 808                }
 809        }
 810
 811        if (atkbd_terminal) {
 812                ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MB);
 813                return 3;
 814        }
 815
 816        if (target_set != 3)
 817                return 2;
 818
 819        if (!ps2_command(ps2dev, param, ATKBD_CMD_OK_GETID)) {
 820                atkbd->id = param[0] << 8 | param[1];
 821                return 2;
 822        }
 823
 824        param[0] = 3;
 825        if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
 826                return 2;
 827
 828        param[0] = 0;
 829        if (ps2_command(ps2dev, param, ATKBD_CMD_GSCANSET))
 830                return 2;
 831
 832        if (param[0] != 3) {
 833                param[0] = 2;
 834                if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
 835                return 2;
 836        }
 837
 838        ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
 839
 840        return 3;
 841}
 842
 843static int atkbd_reset_state(struct atkbd *atkbd)
 844{
 845        struct ps2dev *ps2dev = &atkbd->ps2dev;
 846        unsigned char param[1];
 847
 848/*
 849 * Set the LEDs to a predefined state (all off).
 850 */
 851
 852        param[0] = 0;
 853        if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
 854                return -1;
 855
 856/*
 857 * Set autorepeat to fastest possible.
 858 */
 859
 860        param[0] = 0;
 861        if (ps2_command(ps2dev, param, ATKBD_CMD_SETREP))
 862                return -1;
 863
 864        return 0;
 865}
 866
 867/*
 868 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
 869 * reboot.
 870 */
 871
 872static void atkbd_cleanup(struct serio *serio)
 873{
 874        struct atkbd *atkbd = serio_get_drvdata(serio);
 875
 876        atkbd_disable(atkbd);
 877        ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
 878}
 879
 880
 881/*
 882 * atkbd_disconnect() closes and frees.
 883 */
 884
 885static void atkbd_disconnect(struct serio *serio)
 886{
 887        struct atkbd *atkbd = serio_get_drvdata(serio);
 888
 889        sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
 890
 891        atkbd_disable(atkbd);
 892
 893        input_unregister_device(atkbd->dev);
 894
 895        /*
 896         * Make sure we don't have a command in flight.
 897         * Note that since atkbd->enabled is false event work will keep
 898         * rescheduling itself until it gets canceled and will not try
 899         * accessing freed input device or serio port.
 900         */
 901        cancel_delayed_work_sync(&atkbd->event_work);
 902
 903        serio_close(serio);
 904        serio_set_drvdata(serio, NULL);
 905        kfree(atkbd);
 906}
 907
 908/*
 909 * generate release events for the keycodes given in data
 910 */
 911static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd,
 912                                                const void *data)
 913{
 914        const unsigned int *keys = data;
 915        unsigned int i;
 916
 917        if (atkbd->set == 2)
 918                for (i = 0; keys[i] != -1U; i++)
 919                        __set_bit(keys[i], atkbd->force_release_mask);
 920}
 921
 922/*
 923 * Most special keys (Fn+F?) on Dell laptops do not generate release
 924 * events so we have to do it ourselves.
 925 */
 926static unsigned int atkbd_dell_laptop_forced_release_keys[] = {
 927        0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U
 928};
 929
 930/*
 931 * Perform fixup for HP system that doesn't generate release
 932 * for its video switch
 933 */
 934static unsigned int atkbd_hp_forced_release_keys[] = {
 935        0x94, -1U
 936};
 937
 938/*
 939 * Samsung NC10,NC20 with Fn+F? key release not working
 940 */
 941static unsigned int atkbd_samsung_forced_release_keys[] = {
 942        0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
 943};
 944
 945/*
 946 * Amilo Pi 3525 key release for Fn+Volume keys not working
 947 */
 948static unsigned int atkbd_amilo_pi3525_forced_release_keys[] = {
 949        0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U
 950};
 951
 952/*
 953 * Amilo Xi 3650 key release for light touch bar not working
 954 */
 955static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = {
 956        0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
 957};
 958
 959/*
 960 * Soltech TA12 system with broken key release on volume keys and mute key
 961 */
 962static unsigned int atkdb_soltech_ta12_forced_release_keys[] = {
 963        0xa0, 0xae, 0xb0, -1U
 964};
 965
 966/*
 967 * Many notebooks don't send key release event for volume up/down
 968 * keys, with key list below common among them
 969 */
 970static unsigned int atkbd_volume_forced_release_keys[] = {
 971        0xae, 0xb0, -1U
 972};
 973
 974/*
 975 * OQO 01+ multimedia keys (64--66) generate e0 6x upon release whereas
 976 * they should be generating e4-e6 (0x80 | code).
 977 */
 978static unsigned int atkbd_oqo_01plus_scancode_fixup(struct atkbd *atkbd,
 979                                                    unsigned int code)
 980{
 981        if (atkbd->translated && atkbd->emul == 1 &&
 982            (code == 0x64 || code == 0x65 || code == 0x66)) {
 983                atkbd->emul = 0;
 984                code |= 0x80;
 985        }
 986
 987        return code;
 988}
 989
 990/*
 991 * atkbd_set_keycode_table() initializes keyboard's keycode table
 992 * according to the selected scancode set
 993 */
 994
 995static void atkbd_set_keycode_table(struct atkbd *atkbd)
 996{
 997        unsigned int scancode;
 998        int i, j;
 999
1000        memset(atkbd->keycode, 0, sizeof(atkbd->keycode));
1001        bitmap_zero(atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
1002
1003        if (atkbd->translated) {
1004                for (i = 0; i < 128; i++) {
1005                        scancode = atkbd_unxlate_table[i];
1006                        atkbd->keycode[i] = atkbd_set2_keycode[scancode];
1007                        atkbd->keycode[i | 0x80] = atkbd_set2_keycode[scancode | 0x80];
1008                        if (atkbd->scroll)
1009                                for (j = 0; j < ARRAY_SIZE(atkbd_scroll_keys); j++)
1010                                        if ((scancode | 0x80) == atkbd_scroll_keys[j].set2)
1011                                                atkbd->keycode[i | 0x80] = atkbd_scroll_keys[j].keycode;
1012                }
1013        } else if (atkbd->set == 3) {
1014                memcpy(atkbd->keycode, atkbd_set3_keycode, sizeof(atkbd->keycode));
1015        } else {
1016                memcpy(atkbd->keycode, atkbd_set2_keycode, sizeof(atkbd->keycode));
1017
1018                if (atkbd->scroll)
1019                        for (i = 0; i < ARRAY_SIZE(atkbd_scroll_keys); i++) {
1020                                scancode = atkbd_scroll_keys[i].set2;
1021                                atkbd->keycode[scancode] = atkbd_scroll_keys[i].keycode;
1022                }
1023        }
1024
1025/*
1026 * HANGEUL and HANJA keys do not send release events so we need to
1027 * generate such events ourselves
1028 */
1029        scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANGEUL);
1030        atkbd->keycode[scancode] = KEY_HANGEUL;
1031        __set_bit(scancode, atkbd->force_release_mask);
1032
1033        scancode = atkbd_compat_scancode(atkbd, ATKBD_RET_HANJA);
1034        atkbd->keycode[scancode] = KEY_HANJA;
1035        __set_bit(scancode, atkbd->force_release_mask);
1036
1037/*
1038 * Perform additional fixups
1039 */
1040        if (atkbd_platform_fixup)
1041                atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data);
1042}
1043
1044/*
1045 * atkbd_set_device_attrs() sets up keyboard's input device structure
1046 */
1047
1048static void atkbd_set_device_attrs(struct atkbd *atkbd)
1049{
1050        struct input_dev *input_dev = atkbd->dev;
1051        int i;
1052
1053        if (atkbd->extra)
1054                snprintf(atkbd->name, sizeof(atkbd->name),
1055                         "AT Set 2 Extra keyboard");
1056        else
1057                snprintf(atkbd->name, sizeof(atkbd->name),
1058                         "AT %s Set %d keyboard",
1059                         atkbd->translated ? "Translated" : "Raw", atkbd->set);
1060
1061        snprintf(atkbd->phys, sizeof(atkbd->phys),
1062                 "%s/input0", atkbd->ps2dev.serio->phys);
1063
1064        input_dev->name = atkbd->name;
1065        input_dev->phys = atkbd->phys;
1066        input_dev->id.bustype = BUS_I8042;
1067        input_dev->id.vendor = 0x0001;
1068        input_dev->id.product = atkbd->translated ? 1 : atkbd->set;
1069        input_dev->id.version = atkbd->id;
1070        input_dev->event = atkbd_event;
1071        input_dev->dev.parent = &atkbd->ps2dev.serio->dev;
1072
1073        input_set_drvdata(input_dev, atkbd);
1074
1075        input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) |
1076                BIT_MASK(EV_MSC);
1077
1078        if (atkbd->write) {
1079                input_dev->evbit[0] |= BIT_MASK(EV_LED);
1080                input_dev->ledbit[0] = BIT_MASK(LED_NUML) |
1081                        BIT_MASK(LED_CAPSL) | BIT_MASK(LED_SCROLLL);
1082        }
1083
1084        if (atkbd->extra)
1085                input_dev->ledbit[0] |= BIT_MASK(LED_COMPOSE) |
1086                        BIT_MASK(LED_SUSPEND) | BIT_MASK(LED_SLEEP) |
1087                        BIT_MASK(LED_MUTE) | BIT_MASK(LED_MISC);
1088
1089        if (!atkbd->softrepeat) {
1090                input_dev->rep[REP_DELAY] = 250;
1091                input_dev->rep[REP_PERIOD] = 33;
1092        }
1093
1094        input_dev->mscbit[0] = atkbd->softraw ? BIT_MASK(MSC_SCAN) :
1095                BIT_MASK(MSC_RAW) | BIT_MASK(MSC_SCAN);
1096
1097        if (atkbd->scroll) {
1098                input_dev->evbit[0] |= BIT_MASK(EV_REL);
1099                input_dev->relbit[0] = BIT_MASK(REL_WHEEL) |
1100                        BIT_MASK(REL_HWHEEL);
1101                __set_bit(BTN_MIDDLE, input_dev->keybit);
1102        }
1103
1104        input_dev->keycode = atkbd->keycode;
1105        input_dev->keycodesize = sizeof(unsigned short);
1106        input_dev->keycodemax = ARRAY_SIZE(atkbd_set2_keycode);
1107
1108        for (i = 0; i < ATKBD_KEYMAP_SIZE; i++) {
1109                if (atkbd->keycode[i] != KEY_RESERVED &&
1110                    atkbd->keycode[i] != ATKBD_KEY_NULL &&
1111                    atkbd->keycode[i] < ATKBD_SPECIAL) {
1112                        __set_bit(atkbd->keycode[i], input_dev->keybit);
1113                }
1114        }
1115}
1116
1117/*
1118 * atkbd_connect() is called when the serio module finds an interface
1119 * that isn't handled yet by an appropriate device driver. We check if
1120 * there is an AT keyboard out there and if yes, we register ourselves
1121 * to the input module.
1122 */
1123
1124static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
1125{
1126        struct atkbd *atkbd;
1127        struct input_dev *dev;
1128        int err = -ENOMEM;
1129
1130        atkbd = kzalloc(sizeof(struct atkbd), GFP_KERNEL);
1131        dev = input_allocate_device();
1132        if (!atkbd || !dev)
1133                goto fail1;
1134
1135        atkbd->dev = dev;
1136        ps2_init(&atkbd->ps2dev, serio);
1137        INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work);
1138        mutex_init(&atkbd->mutex);
1139
1140        switch (serio->id.type) {
1141
1142        case SERIO_8042_XL:
1143                atkbd->translated = true;
1144                /* Fall through */
1145
1146        case SERIO_8042:
1147                if (serio->write)
1148                        atkbd->write = true;
1149                break;
1150        }
1151
1152        atkbd->softraw = atkbd_softraw;
1153        atkbd->softrepeat = atkbd_softrepeat;
1154        atkbd->scroll = atkbd_scroll;
1155
1156        if (atkbd->softrepeat)
1157                atkbd->softraw = true;
1158
1159        serio_set_drvdata(serio, atkbd);
1160
1161        err = serio_open(serio, drv);
1162        if (err)
1163                goto fail2;
1164
1165        if (atkbd->write) {
1166
1167                if (atkbd_probe(atkbd)) {
1168                        err = -ENODEV;
1169                        goto fail3;
1170                }
1171
1172                atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
1173                atkbd_reset_state(atkbd);
1174
1175        } else {
1176                atkbd->set = 2;
1177                atkbd->id = 0xab00;
1178        }
1179
1180        atkbd_set_keycode_table(atkbd);
1181        atkbd_set_device_attrs(atkbd);
1182
1183        err = sysfs_create_group(&serio->dev.kobj, &atkbd_attribute_group);
1184        if (err)
1185                goto fail3;
1186
1187        atkbd_enable(atkbd);
1188        if (serio->write)
1189                atkbd_activate(atkbd);
1190
1191        err = input_register_device(atkbd->dev);
1192        if (err)
1193                goto fail4;
1194
1195        return 0;
1196
1197 fail4: sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
1198 fail3: serio_close(serio);
1199 fail2: serio_set_drvdata(serio, NULL);
1200 fail1: input_free_device(dev);
1201        kfree(atkbd);
1202        return err;
1203}
1204
1205/*
1206 * atkbd_reconnect() tries to restore keyboard into a sane state and is
1207 * most likely called on resume.
1208 */
1209
1210static int atkbd_reconnect(struct serio *serio)
1211{
1212        struct atkbd *atkbd = serio_get_drvdata(serio);
1213        struct serio_driver *drv = serio->drv;
1214        int retval = -1;
1215
1216        if (!atkbd || !drv) {
1217                dev_dbg(&serio->dev,
1218                        "reconnect request, but serio is disconnected, ignoring...\n");
1219                return -1;
1220        }
1221
1222        mutex_lock(&atkbd->mutex);
1223
1224        atkbd_disable(atkbd);
1225
1226        if (atkbd->write) {
1227                if (atkbd_probe(atkbd))
1228                        goto out;
1229
1230                if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1231                        goto out;
1232
1233                /*
1234                 * Restore LED state and repeat rate. While input core
1235                 * will do this for us at resume time reconnect may happen
1236                 * because user requested it via sysfs or simply because
1237                 * keyboard was unplugged and plugged in again so we need
1238                 * to do it ourselves here.
1239                 */
1240                atkbd_set_leds(atkbd);
1241                if (!atkbd->softrepeat)
1242                        atkbd_set_repeat_rate(atkbd);
1243
1244        }
1245
1246        /*
1247         * Reset our state machine in case reconnect happened in the middle
1248         * of multi-byte scancode.
1249         */
1250        atkbd->xl_bit = 0;
1251        atkbd->emul = 0;
1252
1253        atkbd_enable(atkbd);
1254        if (atkbd->write)
1255                atkbd_activate(atkbd);
1256
1257        retval = 0;
1258
1259 out:
1260        mutex_unlock(&atkbd->mutex);
1261        return retval;
1262}
1263
1264static struct serio_device_id atkbd_serio_ids[] = {
1265        {
1266                .type   = SERIO_8042,
1267                .proto  = SERIO_ANY,
1268                .id     = SERIO_ANY,
1269                .extra  = SERIO_ANY,
1270        },
1271        {
1272                .type   = SERIO_8042_XL,
1273                .proto  = SERIO_ANY,
1274                .id     = SERIO_ANY,
1275                .extra  = SERIO_ANY,
1276        },
1277        {
1278                .type   = SERIO_RS232,
1279                .proto  = SERIO_PS2SER,
1280                .id     = SERIO_ANY,
1281                .extra  = SERIO_ANY,
1282        },
1283        { 0 }
1284};
1285
1286MODULE_DEVICE_TABLE(serio, atkbd_serio_ids);
1287
1288static struct serio_driver atkbd_drv = {
1289        .driver         = {
1290                .name   = "atkbd",
1291        },
1292        .description    = DRIVER_DESC,
1293        .id_table       = atkbd_serio_ids,
1294        .interrupt      = atkbd_interrupt,
1295        .connect        = atkbd_connect,
1296        .reconnect      = atkbd_reconnect,
1297        .disconnect     = atkbd_disconnect,
1298        .cleanup        = atkbd_cleanup,
1299};
1300
1301static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
1302                                ssize_t (*handler)(struct atkbd *, char *))
1303{
1304        struct serio *serio = to_serio_port(dev);
1305        struct atkbd *atkbd = serio_get_drvdata(serio);
1306
1307        return handler(atkbd, buf);
1308}
1309
1310static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t count,
1311                                ssize_t (*handler)(struct atkbd *, const char *, size_t))
1312{
1313        struct serio *serio = to_serio_port(dev);
1314        struct atkbd *atkbd = serio_get_drvdata(serio);
1315        int retval;
1316
1317        retval = mutex_lock_interruptible(&atkbd->mutex);
1318        if (retval)
1319                return retval;
1320
1321        atkbd_disable(atkbd);
1322        retval = handler(atkbd, buf, count);
1323        atkbd_enable(atkbd);
1324
1325        mutex_unlock(&atkbd->mutex);
1326
1327        return retval;
1328}
1329
1330static ssize_t atkbd_show_extra(struct atkbd *atkbd, char *buf)
1331{
1332        return sprintf(buf, "%d\n", atkbd->extra ? 1 : 0);
1333}
1334
1335static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t count)
1336{
1337        struct input_dev *old_dev, *new_dev;
1338        unsigned int value;
1339        int err;
1340        bool old_extra;
1341        unsigned char old_set;
1342
1343        if (!atkbd->write)
1344                return -EIO;
1345
1346        err = kstrtouint(buf, 10, &value);
1347        if (err)
1348                return err;
1349
1350        if (value > 1)
1351                return -EINVAL;
1352
1353        if (atkbd->extra != value) {
1354                /*
1355                 * Since device's properties will change we need to
1356                 * unregister old device. But allocate and register
1357                 * new one first to make sure we have it.
1358                 */
1359                old_dev = atkbd->dev;
1360                old_extra = atkbd->extra;
1361                old_set = atkbd->set;
1362
1363                new_dev = input_allocate_device();
1364                if (!new_dev)
1365                        return -ENOMEM;
1366
1367                atkbd->dev = new_dev;
1368                atkbd->set = atkbd_select_set(atkbd, atkbd->set, value);
1369                atkbd_reset_state(atkbd);
1370                atkbd_activate(atkbd);
1371                atkbd_set_keycode_table(atkbd);
1372                atkbd_set_device_attrs(atkbd);
1373
1374                err = input_register_device(atkbd->dev);
1375                if (err) {
1376                        input_free_device(new_dev);
1377
1378                        atkbd->dev = old_dev;
1379                        atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1380                        atkbd_set_keycode_table(atkbd);
1381                        atkbd_set_device_attrs(atkbd);
1382
1383                        return err;
1384                }
1385                input_unregister_device(old_dev);
1386
1387        }
1388        return count;
1389}
1390
1391static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
1392{
1393        size_t len = bitmap_scnlistprintf(buf, PAGE_SIZE - 2,
1394                        atkbd->force_release_mask, ATKBD_KEYMAP_SIZE);
1395
1396        buf[len++] = '\n';
1397        buf[len] = '\0';
1398
1399        return len;
1400}
1401
1402static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
1403                                        const char *buf, size_t count)
1404{
1405        /* 64 bytes on stack should be acceptable */
1406        DECLARE_BITMAP(new_mask, ATKBD_KEYMAP_SIZE);
1407        int err;
1408
1409        err = bitmap_parselist(buf, new_mask, ATKBD_KEYMAP_SIZE);
1410        if (err)
1411                return err;
1412
1413        memcpy(atkbd->force_release_mask, new_mask, sizeof(atkbd->force_release_mask));
1414        return count;
1415}
1416
1417
1418static ssize_t atkbd_show_scroll(struct atkbd *atkbd, char *buf)
1419{
1420        return sprintf(buf, "%d\n", atkbd->scroll ? 1 : 0);
1421}
1422
1423static ssize_t atkbd_set_scroll(struct atkbd *atkbd, const char *buf, size_t count)
1424{
1425        struct input_dev *old_dev, *new_dev;
1426        unsigned int value;
1427        int err;
1428        bool old_scroll;
1429
1430        err = kstrtouint(buf, 10, &value);
1431        if (err)
1432                return err;
1433
1434        if (value > 1)
1435                return -EINVAL;
1436
1437        if (atkbd->scroll != value) {
1438                old_dev = atkbd->dev;
1439                old_scroll = atkbd->scroll;
1440
1441                new_dev = input_allocate_device();
1442                if (!new_dev)
1443                        return -ENOMEM;
1444
1445                atkbd->dev = new_dev;
1446                atkbd->scroll = value;
1447                atkbd_set_keycode_table(atkbd);
1448                atkbd_set_device_attrs(atkbd);
1449
1450                err = input_register_device(atkbd->dev);
1451                if (err) {
1452                        input_free_device(new_dev);
1453
1454                        atkbd->scroll = old_scroll;
1455                        atkbd->dev = old_dev;
1456                        atkbd_set_keycode_table(atkbd);
1457                        atkbd_set_device_attrs(atkbd);
1458
1459                        return err;
1460                }
1461                input_unregister_device(old_dev);
1462        }
1463        return count;
1464}
1465
1466static ssize_t atkbd_show_set(struct atkbd *atkbd, char *buf)
1467{
1468        return sprintf(buf, "%d\n", atkbd->set);
1469}
1470
1471static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
1472{
1473        struct input_dev *old_dev, *new_dev;
1474        unsigned int value;
1475        int err;
1476        unsigned char old_set;
1477        bool old_extra;
1478
1479        if (!atkbd->write)
1480                return -EIO;
1481
1482        err = kstrtouint(buf, 10, &value);
1483        if (err)
1484                return err;
1485
1486        if (value != 2 && value != 3)
1487                return -EINVAL;
1488
1489        if (atkbd->set != value) {
1490                old_dev = atkbd->dev;
1491                old_extra = atkbd->extra;
1492                old_set = atkbd->set;
1493
1494                new_dev = input_allocate_device();
1495                if (!new_dev)
1496                        return -ENOMEM;
1497
1498                atkbd->dev = new_dev;
1499                atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
1500                atkbd_reset_state(atkbd);
1501                atkbd_activate(atkbd);
1502                atkbd_set_keycode_table(atkbd);
1503                atkbd_set_device_attrs(atkbd);
1504
1505                err = input_register_device(atkbd->dev);
1506                if (err) {
1507                        input_free_device(new_dev);
1508
1509                        atkbd->dev = old_dev;
1510                        atkbd->set = atkbd_select_set(atkbd, old_set, old_extra);
1511                        atkbd_set_keycode_table(atkbd);
1512                        atkbd_set_device_attrs(atkbd);
1513
1514                        return err;
1515                }
1516                input_unregister_device(old_dev);
1517        }
1518        return count;
1519}
1520
1521static ssize_t atkbd_show_softrepeat(struct atkbd *atkbd, char *buf)
1522{
1523        return sprintf(buf, "%d\n", atkbd->softrepeat ? 1 : 0);
1524}
1525
1526static ssize_t atkbd_set_softrepeat(struct atkbd *atkbd, const char *buf, size_t count)
1527{
1528        struct input_dev *old_dev, *new_dev;
1529        unsigned int value;
1530        int err;
1531        bool old_softrepeat, old_softraw;
1532
1533        if (!atkbd->write)
1534                return -EIO;
1535
1536        err = kstrtouint(buf, 10, &value);
1537        if (err)
1538                return err;
1539
1540        if (value > 1)
1541                return -EINVAL;
1542
1543        if (atkbd->softrepeat != value) {
1544                old_dev = atkbd->dev;
1545                old_softrepeat = atkbd->softrepeat;
1546                old_softraw = atkbd->softraw;
1547
1548                new_dev = input_allocate_device();
1549                if (!new_dev)
1550                        return -ENOMEM;
1551
1552                atkbd->dev = new_dev;
1553                atkbd->softrepeat = value;
1554                if (atkbd->softrepeat)
1555                        atkbd->softraw = true;
1556                atkbd_set_device_attrs(atkbd);
1557
1558                err = input_register_device(atkbd->dev);
1559                if (err) {
1560                        input_free_device(new_dev);
1561
1562                        atkbd->dev = old_dev;
1563                        atkbd->softrepeat = old_softrepeat;
1564                        atkbd->softraw = old_softraw;
1565                        atkbd_set_device_attrs(atkbd);
1566
1567                        return err;
1568                }
1569                input_unregister_device(old_dev);
1570        }
1571        return count;
1572}
1573
1574
1575static ssize_t atkbd_show_softraw(struct atkbd *atkbd, char *buf)
1576{
1577        return sprintf(buf, "%d\n", atkbd->softraw ? 1 : 0);
1578}
1579
1580static ssize_t atkbd_set_softraw(struct atkbd *atkbd, const char *buf, size_t count)
1581{
1582        struct input_dev *old_dev, *new_dev;
1583        unsigned int value;
1584        int err;
1585        bool old_softraw;
1586
1587        err = kstrtouint(buf, 10, &value);
1588        if (err)
1589                return err;
1590
1591        if (value > 1)
1592                return -EINVAL;
1593
1594        if (atkbd->softraw != value) {
1595                old_dev = atkbd->dev;
1596                old_softraw = atkbd->softraw;
1597
1598                new_dev = input_allocate_device();
1599                if (!new_dev)
1600                        return -ENOMEM;
1601
1602                atkbd->dev = new_dev;
1603                atkbd->softraw = value;
1604                atkbd_set_device_attrs(atkbd);
1605
1606                err = input_register_device(atkbd->dev);
1607                if (err) {
1608                        input_free_device(new_dev);
1609
1610                        atkbd->dev = old_dev;
1611                        atkbd->softraw = old_softraw;
1612                        atkbd_set_device_attrs(atkbd);
1613
1614                        return err;
1615                }
1616                input_unregister_device(old_dev);
1617        }
1618        return count;
1619}
1620
1621static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf)
1622{
1623        return sprintf(buf, "%lu\n", atkbd->err_count);
1624}
1625
1626static int __init atkbd_setup_forced_release(const struct dmi_system_id *id)
1627{
1628        atkbd_platform_fixup = atkbd_apply_forced_release_keylist;
1629        atkbd_platform_fixup_data = id->driver_data;
1630
1631        return 1;
1632}
1633
1634static int __init atkbd_setup_scancode_fixup(const struct dmi_system_id *id)
1635{
1636        atkbd_platform_scancode_fixup = id->driver_data;
1637
1638        return 1;
1639}
1640
1641static const struct dmi_system_id atkbd_dmi_quirk_table[] __initconst = {
1642        {
1643                .matches = {
1644                        DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
1645                        DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1646                },
1647                .callback = atkbd_setup_forced_release,
1648                .driver_data = atkbd_dell_laptop_forced_release_keys,
1649        },
1650        {
1651                .matches = {
1652                        DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
1653                        DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
1654                },
1655                .callback = atkbd_setup_forced_release,
1656                .driver_data = atkbd_dell_laptop_forced_release_keys,
1657        },
1658        {
1659                .matches = {
1660                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1661                        DMI_MATCH(DMI_PRODUCT_NAME, "HP 2133"),
1662                },
1663                .callback = atkbd_setup_forced_release,
1664                .driver_data = atkbd_hp_forced_release_keys,
1665        },
1666        {
1667                .matches = {
1668                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1669                        DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ZV6100"),
1670                },
1671                .callback = atkbd_setup_forced_release,
1672                .driver_data = atkbd_volume_forced_release_keys,
1673        },
1674        {
1675                .matches = {
1676                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1677                        DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4000"),
1678                },
1679                .callback = atkbd_setup_forced_release,
1680                .driver_data = atkbd_volume_forced_release_keys,
1681        },
1682        {
1683                .matches = {
1684                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1685                        DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4100"),
1686                },
1687                .callback = atkbd_setup_forced_release,
1688                .driver_data = atkbd_volume_forced_release_keys,
1689        },
1690        {
1691                .matches = {
1692                        DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
1693                        DMI_MATCH(DMI_PRODUCT_NAME, "Presario R4200"),
1694                },
1695                .callback = atkbd_setup_forced_release,
1696                .driver_data = atkbd_volume_forced_release_keys,
1697        },
1698        {
1699                /* Inventec Symphony */
1700                .matches = {
1701                        DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"),
1702                        DMI_MATCH(DMI_PRODUCT_NAME, "SYMPHONY 6.0/7.0"),
1703                },
1704                .callback = atkbd_setup_forced_release,
1705                .driver_data = atkbd_volume_forced_release_keys,
1706        },
1707        {
1708                /* Samsung NC10 */
1709                .matches = {
1710                        DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1711                        DMI_MATCH(DMI_PRODUCT_NAME, "NC10"),
1712                },
1713                .callback = atkbd_setup_forced_release,
1714                .driver_data = atkbd_samsung_forced_release_keys,
1715        },
1716        {
1717                /* Samsung NC20 */
1718                .matches = {
1719                        DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1720                        DMI_MATCH(DMI_PRODUCT_NAME, "NC20"),
1721                },
1722                .callback = atkbd_setup_forced_release,
1723                .driver_data = atkbd_samsung_forced_release_keys,
1724        },
1725        {
1726                /* Samsung SQ45S70S */
1727                .matches = {
1728                        DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1729                        DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"),
1730                },
1731                .callback = atkbd_setup_forced_release,
1732                .driver_data = atkbd_samsung_forced_release_keys,
1733        },
1734        {
1735                /* Fujitsu Amilo PA 1510 */
1736                .matches = {
1737                        DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1738                        DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 1510"),
1739                },
1740                .callback = atkbd_setup_forced_release,
1741                .driver_data = atkbd_volume_forced_release_keys,
1742        },
1743        {
1744                /* Fujitsu Amilo Pi 3525 */
1745                .matches = {
1746                        DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1747                        DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 3525"),
1748                },
1749                .callback = atkbd_setup_forced_release,
1750                .driver_data = atkbd_amilo_pi3525_forced_release_keys,
1751        },
1752        {
1753                /* Fujitsu Amilo Xi 3650 */
1754                .matches = {
1755                        DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1756                        DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 3650"),
1757                },
1758                .callback = atkbd_setup_forced_release,
1759                .driver_data = atkbd_amilo_xi3650_forced_release_keys,
1760        },
1761        {
1762                .matches = {
1763                        DMI_MATCH(DMI_SYS_VENDOR, "Soltech Corporation"),
1764                        DMI_MATCH(DMI_PRODUCT_NAME, "TA12"),
1765                },
1766                .callback = atkbd_setup_forced_release,
1767                .driver_data = atkdb_soltech_ta12_forced_release_keys,
1768        },
1769        {
1770                /* OQO Model 01+ */
1771                .matches = {
1772                        DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
1773                        DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
1774                },
1775                .callback = atkbd_setup_scancode_fixup,
1776                .driver_data = atkbd_oqo_01plus_scancode_fixup,
1777        },
1778        { }
1779};
1780
1781static int __init atkbd_init(void)
1782{
1783        dmi_check_system(atkbd_dmi_quirk_table);
1784
1785        return serio_register_driver(&atkbd_drv);
1786}
1787
1788static void __exit atkbd_exit(void)
1789{
1790        serio_unregister_driver(&atkbd_drv);
1791}
1792
1793module_init(atkbd_init);
1794module_exit(atkbd_exit);
1795