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