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