cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

atkbd.c (47980B)


      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);