xref: /openbmc/linux/drivers/input/serio/i8042.c (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1 /*
2  *  i8042 keyboard and mouse controller driver for Linux
3  *
4  *  Copyright (c) 1999-2004 Vojtech Pavlik
5  */
6 
7 /*
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License version 2 as published by
10  * the Free Software Foundation.
11  */
12 
13 #include <linux/delay.h>
14 #include <linux/module.h>
15 #include <linux/moduleparam.h>
16 #include <linux/interrupt.h>
17 #include <linux/ioport.h>
18 #include <linux/config.h>
19 #include <linux/init.h>
20 #include <linux/serio.h>
21 #include <linux/err.h>
22 #include <linux/rcupdate.h>
23 
24 #include <asm/io.h>
25 
26 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
27 MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver");
28 MODULE_LICENSE("GPL");
29 
30 static unsigned int i8042_noaux;
31 module_param_named(noaux, i8042_noaux, bool, 0);
32 MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");
33 
34 static unsigned int i8042_nomux;
35 module_param_named(nomux, i8042_nomux, bool, 0);
36 MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing conrtoller is present.");
37 
38 static unsigned int i8042_unlock;
39 module_param_named(unlock, i8042_unlock, bool, 0);
40 MODULE_PARM_DESC(unlock, "Ignore keyboard lock.");
41 
42 static unsigned int i8042_reset;
43 module_param_named(reset, i8042_reset, bool, 0);
44 MODULE_PARM_DESC(reset, "Reset controller during init and cleanup.");
45 
46 static unsigned int i8042_direct;
47 module_param_named(direct, i8042_direct, bool, 0);
48 MODULE_PARM_DESC(direct, "Put keyboard port into non-translated mode.");
49 
50 static unsigned int i8042_dumbkbd;
51 module_param_named(dumbkbd, i8042_dumbkbd, bool, 0);
52 MODULE_PARM_DESC(dumbkbd, "Pretend that controller can only read data from keyboard");
53 
54 static unsigned int i8042_noloop;
55 module_param_named(noloop, i8042_noloop, bool, 0);
56 MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port");
57 
58 static unsigned int i8042_blink_frequency = 500;
59 module_param_named(panicblink, i8042_blink_frequency, uint, 0600);
60 MODULE_PARM_DESC(panicblink, "Frequency with which keyboard LEDs should blink when kernel panics");
61 
62 #ifdef CONFIG_PNP
63 static int i8042_nopnp;
64 module_param_named(nopnp, i8042_nopnp, bool, 0);
65 MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings");
66 #endif
67 
68 #define DEBUG
69 #ifdef DEBUG
70 static int i8042_debug;
71 module_param_named(debug, i8042_debug, bool, 0600);
72 MODULE_PARM_DESC(debug, "Turn i8042 debugging mode on and off");
73 #endif
74 
75 __obsolete_setup("i8042_noaux");
76 __obsolete_setup("i8042_nomux");
77 __obsolete_setup("i8042_unlock");
78 __obsolete_setup("i8042_reset");
79 __obsolete_setup("i8042_direct");
80 __obsolete_setup("i8042_dumbkbd");
81 
82 #include "i8042.h"
83 
84 static DEFINE_SPINLOCK(i8042_lock);
85 
86 struct i8042_port {
87 	struct serio *serio;
88 	int irq;
89 	unsigned char disable;
90 	unsigned char irqen;
91 	unsigned char exists;
92 	signed char mux;
93 	char name[8];
94 };
95 
96 #define I8042_KBD_PORT_NO	0
97 #define I8042_AUX_PORT_NO	1
98 #define I8042_MUX_PORT_NO	2
99 #define I8042_NUM_PORTS		(I8042_NUM_MUX_PORTS + 2)
100 static struct i8042_port i8042_ports[I8042_NUM_PORTS] = {
101 	{
102 		.disable	= I8042_CTR_KBDDIS,
103 		.irqen 		= I8042_CTR_KBDINT,
104 		.mux		= -1,
105 		.name		= "KBD",
106 	},
107 	{
108 		.disable	= I8042_CTR_AUXDIS,
109 		.irqen		= I8042_CTR_AUXINT,
110 		.mux		= -1,
111 		.name		= "AUX",
112 	}
113 };
114 
115 static unsigned char i8042_initial_ctr;
116 static unsigned char i8042_ctr;
117 static unsigned char i8042_mux_open;
118 static unsigned char i8042_mux_present;
119 static struct timer_list i8042_timer;
120 static struct platform_device *i8042_platform_device;
121 
122 
123 /*
124  * Shared IRQ's require a device pointer, but this driver doesn't support
125  * multiple devices
126  */
127 #define i8042_request_irq_cookie (&i8042_timer)
128 
129 static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs);
130 
131 /*
132  * The i8042_wait_read() and i8042_wait_write functions wait for the i8042 to
133  * be ready for reading values from it / writing values to it.
134  * Called always with i8042_lock held.
135  */
136 
137 static int i8042_wait_read(void)
138 {
139 	int i = 0;
140 	while ((~i8042_read_status() & I8042_STR_OBF) && (i < I8042_CTL_TIMEOUT)) {
141 		udelay(50);
142 		i++;
143 	}
144 	return -(i == I8042_CTL_TIMEOUT);
145 }
146 
147 static int i8042_wait_write(void)
148 {
149 	int i = 0;
150 	while ((i8042_read_status() & I8042_STR_IBF) && (i < I8042_CTL_TIMEOUT)) {
151 		udelay(50);
152 		i++;
153 	}
154 	return -(i == I8042_CTL_TIMEOUT);
155 }
156 
157 /*
158  * i8042_flush() flushes all data that may be in the keyboard and mouse buffers
159  * of the i8042 down the toilet.
160  */
161 
162 static int i8042_flush(void)
163 {
164 	unsigned long flags;
165 	unsigned char data, str;
166 	int i = 0;
167 
168 	spin_lock_irqsave(&i8042_lock, flags);
169 
170 	while (((str = i8042_read_status()) & I8042_STR_OBF) && (i < I8042_BUFFER_SIZE)) {
171 		udelay(50);
172 		data = i8042_read_data();
173 		i++;
174 		dbg("%02x <- i8042 (flush, %s)", data,
175 			str & I8042_STR_AUXDATA ? "aux" : "kbd");
176 	}
177 
178 	spin_unlock_irqrestore(&i8042_lock, flags);
179 
180 	return i;
181 }
182 
183 /*
184  * i8042_command() executes a command on the i8042. It also sends the input
185  * parameter(s) of the commands to it, and receives the output value(s). The
186  * parameters are to be stored in the param array, and the output is placed
187  * into the same array. The number of the parameters and output values is
188  * encoded in bits 8-11 of the command number.
189  */
190 
191 static int i8042_command(unsigned char *param, int command)
192 {
193 	unsigned long flags;
194 	int retval = 0, i = 0;
195 
196 	if (i8042_noloop && command == I8042_CMD_AUX_LOOP)
197 		return -1;
198 
199 	spin_lock_irqsave(&i8042_lock, flags);
200 
201 	retval = i8042_wait_write();
202 	if (!retval) {
203 		dbg("%02x -> i8042 (command)", command & 0xff);
204 		i8042_write_command(command & 0xff);
205 	}
206 
207 	if (!retval)
208 		for (i = 0; i < ((command >> 12) & 0xf); i++) {
209 			if ((retval = i8042_wait_write())) break;
210 			dbg("%02x -> i8042 (parameter)", param[i]);
211 			i8042_write_data(param[i]);
212 		}
213 
214 	if (!retval)
215 		for (i = 0; i < ((command >> 8) & 0xf); i++) {
216 			if ((retval = i8042_wait_read())) break;
217 			if (i8042_read_status() & I8042_STR_AUXDATA)
218 				param[i] = ~i8042_read_data();
219 			else
220 				param[i] = i8042_read_data();
221 			dbg("%02x <- i8042 (return)", param[i]);
222 		}
223 
224 	spin_unlock_irqrestore(&i8042_lock, flags);
225 
226 	if (retval)
227 		dbg("     -- i8042 (timeout)");
228 
229 	return retval;
230 }
231 
232 /*
233  * i8042_kbd_write() sends a byte out through the keyboard interface.
234  */
235 
236 static int i8042_kbd_write(struct serio *port, unsigned char c)
237 {
238 	unsigned long flags;
239 	int retval = 0;
240 
241 	spin_lock_irqsave(&i8042_lock, flags);
242 
243 	if(!(retval = i8042_wait_write())) {
244 		dbg("%02x -> i8042 (kbd-data)", c);
245 		i8042_write_data(c);
246 	}
247 
248 	spin_unlock_irqrestore(&i8042_lock, flags);
249 
250 	return retval;
251 }
252 
253 /*
254  * i8042_aux_write() sends a byte out through the aux interface.
255  */
256 
257 static int i8042_aux_write(struct serio *serio, unsigned char c)
258 {
259 	struct i8042_port *port = serio->port_data;
260 	int retval;
261 
262 /*
263  * Send the byte out.
264  */
265 
266 	if (port->mux == -1)
267 		retval = i8042_command(&c, I8042_CMD_AUX_SEND);
268 	else
269 		retval = i8042_command(&c, I8042_CMD_MUX_SEND + port->mux);
270 
271 /*
272  * Make sure the interrupt happens and the character is received even
273  * in the case the IRQ isn't wired, so that we can receive further
274  * characters later.
275  */
276 
277 	i8042_interrupt(0, NULL, NULL);
278 	return retval;
279 }
280 
281 /*
282  * i8042_activate_port() enables port on a chip.
283  */
284 
285 static int i8042_activate_port(struct i8042_port *port)
286 {
287 	if (!port->serio)
288 		return -1;
289 
290 	i8042_flush();
291 
292 	/*
293 	 * Enable port again here because it is disabled if we are
294 	 * resuming (normally it is enabled already).
295 	 */
296 	i8042_ctr &= ~port->disable;
297 
298 	i8042_ctr |= port->irqen;
299 
300 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
301 		i8042_ctr &= ~port->irqen;
302 		return -1;
303 	}
304 
305 	return 0;
306 }
307 
308 
309 /*
310  * i8042_open() is called when a port is open by the higher layer.
311  * It allocates the interrupt and calls i8042_enable_port.
312  */
313 
314 static int i8042_open(struct serio *serio)
315 {
316 	struct i8042_port *port = serio->port_data;
317 
318 	if (port->mux != -1)
319 		if (i8042_mux_open++)
320 			return 0;
321 
322 	if (request_irq(port->irq, i8042_interrupt,
323 			SA_SHIRQ, "i8042", i8042_request_irq_cookie)) {
324 		printk(KERN_ERR "i8042.c: Can't get irq %d for %s, unregistering the port.\n", port->irq, port->name);
325 		goto irq_fail;
326 	}
327 
328 	if (i8042_activate_port(port)) {
329 		printk(KERN_ERR "i8042.c: Can't activate %s, unregistering the port\n", port->name);
330 		goto activate_fail;
331 	}
332 
333 	i8042_interrupt(0, NULL, NULL);
334 
335 	return 0;
336 
337 activate_fail:
338 	free_irq(port->irq, i8042_request_irq_cookie);
339 
340 irq_fail:
341 	serio_unregister_port_delayed(serio);
342 
343 	return -1;
344 }
345 
346 /*
347  * i8042_close() frees the interrupt, so that it can possibly be used
348  * by another driver. We never know - if the user doesn't have a mouse,
349  * the BIOS could have used the AUX interrupt for PCI.
350  */
351 
352 static void i8042_close(struct serio *serio)
353 {
354 	struct i8042_port *port = serio->port_data;
355 
356 	if (port->mux != -1)
357 		if (--i8042_mux_open)
358 			return;
359 
360 	i8042_ctr &= ~port->irqen;
361 
362 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
363 		printk(KERN_WARNING "i8042.c: Can't write CTR while closing %s.\n", port->name);
364 /*
365  * We still want to continue and free IRQ so if more data keeps coming in
366  * kernel will just ignore the irq.
367  */
368 	}
369 
370 	free_irq(port->irq, i8042_request_irq_cookie);
371 
372 	i8042_flush();
373 }
374 
375 /*
376  * i8042_start() is called by serio core when port is about to finish
377  * registering. It will mark port as existing so i8042_interrupt can
378  * start sending data through it.
379  */
380 static int i8042_start(struct serio *serio)
381 {
382 	struct i8042_port *port = serio->port_data;
383 
384 	port->exists = 1;
385 	mb();
386 	return 0;
387 }
388 
389 /*
390  * i8042_stop() marks serio port as non-existing so i8042_interrupt
391  * will not try to send data to the port that is about to go away.
392  * The function is called by serio core as part of unregister procedure.
393  */
394 static void i8042_stop(struct serio *serio)
395 {
396 	struct i8042_port *port = serio->port_data;
397 
398 	port->exists = 0;
399 	synchronize_kernel();
400 	port->serio = NULL;
401 }
402 
403 /*
404  * i8042_interrupt() is the most important function in this driver -
405  * it handles the interrupts from the i8042, and sends incoming bytes
406  * to the upper layers.
407  */
408 
409 static irqreturn_t i8042_interrupt(int irq, void *dev_id, struct pt_regs *regs)
410 {
411 	struct i8042_port *port;
412 	unsigned long flags;
413 	unsigned char str, data;
414 	unsigned int dfl;
415 	unsigned int port_no;
416 	int ret;
417 
418 	mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
419 
420 	spin_lock_irqsave(&i8042_lock, flags);
421 	str = i8042_read_status();
422 	if (unlikely(~str & I8042_STR_OBF)) {
423 		spin_unlock_irqrestore(&i8042_lock, flags);
424 		if (irq) dbg("Interrupt %d, without any data", irq);
425 		ret = 0;
426 		goto out;
427 	}
428 	data = i8042_read_data();
429 	spin_unlock_irqrestore(&i8042_lock, flags);
430 
431 	if (i8042_mux_present && (str & I8042_STR_AUXDATA)) {
432 		static unsigned long last_transmit;
433 		static unsigned char last_str;
434 
435 		dfl = 0;
436 		if (str & I8042_STR_MUXERR) {
437 			dbg("MUX error, status is %02x, data is %02x", str, data);
438 			switch (data) {
439 				default:
440 /*
441  * When MUXERR condition is signalled the data register can only contain
442  * 0xfd, 0xfe or 0xff if implementation follows the spec. Unfortunately
443  * it is not always the case. Some KBC just get confused which port the
444  * data came from and signal error leaving the data intact. They _do not_
445  * revert to legacy mode (actually I've never seen KBC reverting to legacy
446  * mode yet, when we see one we'll add proper handling).
447  * Anyway, we will assume that the data came from the same serio last byte
448  * was transmitted (if transmission happened not too long ago).
449  */
450 					if (time_before(jiffies, last_transmit + HZ/10)) {
451 						str = last_str;
452 						break;
453 					}
454 					/* fall through - report timeout */
455 				case 0xfd:
456 				case 0xfe: dfl = SERIO_TIMEOUT; data = 0xfe; break;
457 				case 0xff: dfl = SERIO_PARITY;  data = 0xfe; break;
458 			}
459 		}
460 
461 		port_no = I8042_MUX_PORT_NO + ((str >> 6) & 3);
462 		last_str = str;
463 		last_transmit = jiffies;
464 	} else {
465 
466 		dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) |
467 		      ((str & I8042_STR_TIMEOUT) ? SERIO_TIMEOUT : 0);
468 
469 		port_no = (str & I8042_STR_AUXDATA) ?
470 				I8042_AUX_PORT_NO : I8042_KBD_PORT_NO;
471 	}
472 
473 	port = &i8042_ports[port_no];
474 
475 	dbg("%02x <- i8042 (interrupt, %s, %d%s%s)",
476 	    data, port->name, irq,
477 	    dfl & SERIO_PARITY ? ", bad parity" : "",
478 	    dfl & SERIO_TIMEOUT ? ", timeout" : "");
479 
480 	if (likely(port->exists))
481 		serio_interrupt(port->serio, data, dfl, regs);
482 
483 	ret = 1;
484 out:
485 	return IRQ_RETVAL(ret);
486 }
487 
488 /*
489  * i8042_set_mux_mode checks whether the controller has an active
490  * multiplexor and puts the chip into Multiplexed (1) or Legacy (0) mode.
491  */
492 
493 static int i8042_set_mux_mode(unsigned int mode, unsigned char *mux_version)
494 {
495 
496 	unsigned char param;
497 /*
498  * Get rid of bytes in the queue.
499  */
500 
501 	i8042_flush();
502 
503 /*
504  * Internal loopback test - send three bytes, they should come back from the
505  * mouse interface, the last should be version. Note that we negate mouseport
506  * command responses for the i8042_check_aux() routine.
507  */
508 
509 	param = 0xf0;
510 	if (i8042_command(&param, I8042_CMD_AUX_LOOP) || param != 0x0f)
511 		return -1;
512 	param = mode ? 0x56 : 0xf6;
513 	if (i8042_command(&param, I8042_CMD_AUX_LOOP) || param != (mode ? 0xa9 : 0x09))
514 		return -1;
515 	param = mode ? 0xa4 : 0xa5;
516 	if (i8042_command(&param, I8042_CMD_AUX_LOOP) || param == (mode ? 0x5b : 0x5a))
517 		return -1;
518 
519 	if (mux_version)
520 		*mux_version = ~param;
521 
522 	return 0;
523 }
524 
525 
526 /*
527  * i8042_enable_mux_ports enables 4 individual AUX ports after
528  * the controller has been switched into Multiplexed mode
529  */
530 
531 static int i8042_enable_mux_ports(void)
532 {
533 	unsigned char param;
534 	int i;
535 /*
536  * Disable all muxed ports by disabling AUX.
537  */
538 
539 	i8042_ctr |= I8042_CTR_AUXDIS;
540 	i8042_ctr &= ~I8042_CTR_AUXINT;
541 
542 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
543 		printk(KERN_ERR "i8042.c: Failed to disable AUX port, can't use MUX.\n");
544 		return -1;
545 	}
546 
547 /*
548  * Enable all muxed ports.
549  */
550 
551 	for (i = 0; i < 4; i++) {
552 		i8042_command(&param, I8042_CMD_MUX_PFX + i);
553 		i8042_command(&param, I8042_CMD_AUX_ENABLE);
554 	}
555 
556 	return 0;
557 }
558 
559 
560 /*
561  * i8042_check_mux() checks whether the controller supports the PS/2 Active
562  * Multiplexing specification by Synaptics, Phoenix, Insyde and
563  * LCS/Telegraphics.
564  */
565 
566 static int __init i8042_check_mux(void)
567 {
568 	unsigned char mux_version;
569 
570 	if (i8042_set_mux_mode(1, &mux_version))
571 		return -1;
572 
573 	/* Workaround for interference with USB Legacy emulation */
574 	/* that causes a v10.12 MUX to be found. */
575 	if (mux_version == 0xAC)
576 		return -1;
577 
578 	printk(KERN_INFO "i8042.c: Detected active multiplexing controller, rev %d.%d.\n",
579 		(mux_version >> 4) & 0xf, mux_version & 0xf);
580 
581 	if (i8042_enable_mux_ports())
582 		return -1;
583 
584 	i8042_mux_present = 1;
585 	return 0;
586 }
587 
588 
589 /*
590  * i8042_check_aux() applies as much paranoia as it can at detecting
591  * the presence of an AUX interface.
592  */
593 
594 static int __init i8042_check_aux(void)
595 {
596 	unsigned char param;
597 	static int i8042_check_aux_cookie;
598 
599 /*
600  * Check if AUX irq is available. If it isn't, then there is no point
601  * in trying to detect AUX presence.
602  */
603 
604 	if (request_irq(i8042_ports[I8042_AUX_PORT_NO].irq, i8042_interrupt,
605 			SA_SHIRQ, "i8042", &i8042_check_aux_cookie))
606                 return -1;
607 	free_irq(i8042_ports[I8042_AUX_PORT_NO].irq, &i8042_check_aux_cookie);
608 
609 /*
610  * Get rid of bytes in the queue.
611  */
612 
613 	i8042_flush();
614 
615 /*
616  * Internal loopback test - filters out AT-type i8042's. Unfortunately
617  * SiS screwed up and their 5597 doesn't support the LOOP command even
618  * though it has an AUX port.
619  */
620 
621 	param = 0x5a;
622 	if (i8042_command(&param, I8042_CMD_AUX_LOOP) || param != 0xa5) {
623 
624 /*
625  * External connection test - filters out AT-soldered PS/2 i8042's
626  * 0x00 - no error, 0x01-0x03 - clock/data stuck, 0xff - general error
627  * 0xfa - no error on some notebooks which ignore the spec
628  * Because it's common for chipsets to return error on perfectly functioning
629  * AUX ports, we test for this only when the LOOP command failed.
630  */
631 
632 		if (i8042_command(&param, I8042_CMD_AUX_TEST)
633 		    	|| (param && param != 0xfa && param != 0xff))
634 				return -1;
635 	}
636 
637 /*
638  * Bit assignment test - filters out PS/2 i8042's in AT mode
639  */
640 
641 	if (i8042_command(&param, I8042_CMD_AUX_DISABLE))
642 		return -1;
643 	if (i8042_command(&param, I8042_CMD_CTL_RCTR) || (~param & I8042_CTR_AUXDIS)) {
644 		printk(KERN_WARNING "Failed to disable AUX port, but continuing anyway... Is this a SiS?\n");
645 		printk(KERN_WARNING "If AUX port is really absent please use the 'i8042.noaux' option.\n");
646 	}
647 
648 	if (i8042_command(&param, I8042_CMD_AUX_ENABLE))
649 		return -1;
650 	if (i8042_command(&param, I8042_CMD_CTL_RCTR) || (param & I8042_CTR_AUXDIS))
651 		return -1;
652 
653 /*
654  * Disable the interface.
655  */
656 
657 	i8042_ctr |= I8042_CTR_AUXDIS;
658 	i8042_ctr &= ~I8042_CTR_AUXINT;
659 
660 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR))
661 		return -1;
662 
663 	return 0;
664 }
665 
666 
667 /*
668  * i8042_port_register() marks the device as existing,
669  * registers it, and reports to the user.
670  */
671 
672 static int __init i8042_port_register(struct i8042_port *port)
673 {
674 	i8042_ctr &= ~port->disable;
675 
676 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
677 		printk(KERN_WARNING "i8042.c: Can't write CTR while registering.\n");
678 		kfree(port->serio);
679 		port->serio = NULL;
680 		i8042_ctr |= port->disable;
681 		return -1;
682 	}
683 
684 	printk(KERN_INFO "serio: i8042 %s port at %#lx,%#lx irq %d\n",
685 	       port->name,
686 	       (unsigned long) I8042_DATA_REG,
687 	       (unsigned long) I8042_COMMAND_REG,
688 	       port->irq);
689 
690 	serio_register_port(port->serio);
691 
692 	return 0;
693 }
694 
695 
696 static void i8042_timer_func(unsigned long data)
697 {
698 	i8042_interrupt(0, NULL, NULL);
699 }
700 
701 
702 /*
703  * i8042_controller init initializes the i8042 controller, and,
704  * most importantly, sets it into non-xlated mode if that's
705  * desired.
706  */
707 
708 static int i8042_controller_init(void)
709 {
710 	unsigned long flags;
711 
712 /*
713  * Test the i8042. We need to know if it thinks it's working correctly
714  * before doing anything else.
715  */
716 
717 	if (i8042_flush() == I8042_BUFFER_SIZE) {
718 		printk(KERN_ERR "i8042.c: No controller found.\n");
719 		return -1;
720 	}
721 
722 	if (i8042_reset) {
723 
724 		unsigned char param;
725 
726 		if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
727 			printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n");
728 			return -1;
729 		}
730 
731 		if (param != I8042_RET_CTL_TEST) {
732 			printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n",
733 				 param, I8042_RET_CTL_TEST);
734 			return -1;
735 		}
736 	}
737 
738 /*
739  * Save the CTR for restoral on unload / reboot.
740  */
741 
742 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_RCTR)) {
743 		printk(KERN_ERR "i8042.c: Can't read CTR while initializing i8042.\n");
744 		return -1;
745 	}
746 
747 	i8042_initial_ctr = i8042_ctr;
748 
749 /*
750  * Disable the keyboard interface and interrupt.
751  */
752 
753 	i8042_ctr |= I8042_CTR_KBDDIS;
754 	i8042_ctr &= ~I8042_CTR_KBDINT;
755 
756 /*
757  * Handle keylock.
758  */
759 
760 	spin_lock_irqsave(&i8042_lock, flags);
761 	if (~i8042_read_status() & I8042_STR_KEYLOCK) {
762 		if (i8042_unlock)
763 			i8042_ctr |= I8042_CTR_IGNKEYLOCK;
764 		 else
765 			printk(KERN_WARNING "i8042.c: Warning: Keylock active.\n");
766 	}
767 	spin_unlock_irqrestore(&i8042_lock, flags);
768 
769 /*
770  * If the chip is configured into nontranslated mode by the BIOS, don't
771  * bother enabling translating and be happy.
772  */
773 
774 	if (~i8042_ctr & I8042_CTR_XLATE)
775 		i8042_direct = 1;
776 
777 /*
778  * Set nontranslated mode for the kbd interface if requested by an option.
779  * After this the kbd interface becomes a simple serial in/out, like the aux
780  * interface is. We don't do this by default, since it can confuse notebook
781  * BIOSes.
782  */
783 
784 	if (i8042_direct)
785 		i8042_ctr &= ~I8042_CTR_XLATE;
786 
787 /*
788  * Write CTR back.
789  */
790 
791 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
792 		printk(KERN_ERR "i8042.c: Can't write CTR while initializing i8042.\n");
793 		return -1;
794 	}
795 
796 	return 0;
797 }
798 
799 
800 /*
801  * Reset the controller.
802  */
803 static void i8042_controller_reset(void)
804 {
805 	unsigned char param;
806 
807 /*
808  * Reset the controller if requested.
809  */
810 
811 	if (i8042_reset)
812 		if (i8042_command(&param, I8042_CMD_CTL_TEST))
813 			printk(KERN_ERR "i8042.c: i8042 controller reset timeout.\n");
814 
815 /*
816  * Disable MUX mode if present.
817  */
818 
819 	if (i8042_mux_present)
820 		i8042_set_mux_mode(0, NULL);
821 
822 /*
823  * Restore the original control register setting.
824  */
825 
826 	i8042_ctr = i8042_initial_ctr;
827 
828 	if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR))
829 		printk(KERN_WARNING "i8042.c: Can't restore CTR.\n");
830 }
831 
832 
833 /*
834  * Here we try to reset everything back to a state in which the BIOS will be
835  * able to talk to the hardware when rebooting.
836  */
837 
838 static void i8042_controller_cleanup(void)
839 {
840 	int i;
841 
842 	i8042_flush();
843 
844 /*
845  * Reset anything that is connected to the ports.
846  */
847 
848 	for (i = 0; i < I8042_NUM_PORTS; i++)
849 		if (i8042_ports[i].exists)
850 			serio_cleanup(i8042_ports[i].serio);
851 
852 	i8042_controller_reset();
853 }
854 
855 
856 /*
857  * i8042_panic_blink() will flash the keyboard LEDs and is called when
858  * kernel panics. Flashing LEDs is useful for users running X who may
859  * not see the console and will help distingushing panics from "real"
860  * lockups.
861  *
862  * Note that DELAY has a limit of 10ms so we will not get stuck here
863  * waiting for KBC to free up even if KBD interrupt is off
864  */
865 
866 #define DELAY do { mdelay(1); if (++delay > 10) return delay; } while(0)
867 
868 static long i8042_panic_blink(long count)
869 {
870 	long delay = 0;
871 	static long last_blink;
872 	static char led;
873 
874 	/*
875 	 * We expect frequency to be about 1/2s. KDB uses about 1s.
876 	 * Make sure they are different.
877 	 */
878 	if (!i8042_blink_frequency)
879 		return 0;
880 	if (count - last_blink < i8042_blink_frequency)
881 		return 0;
882 
883 	led ^= 0x01 | 0x04;
884 	while (i8042_read_status() & I8042_STR_IBF)
885 		DELAY;
886 	i8042_write_data(0xed); /* set leds */
887 	DELAY;
888 	while (i8042_read_status() & I8042_STR_IBF)
889 		DELAY;
890 	DELAY;
891 	i8042_write_data(led);
892 	DELAY;
893 	last_blink = count;
894 	return delay;
895 }
896 
897 #undef DELAY
898 
899 /*
900  * Here we try to restore the original BIOS settings
901  */
902 
903 static int i8042_suspend(struct device *dev, pm_message_t state, u32 level)
904 {
905 	if (level == SUSPEND_DISABLE) {
906 		del_timer_sync(&i8042_timer);
907 		i8042_controller_reset();
908 	}
909 
910 	return 0;
911 }
912 
913 
914 /*
915  * Here we try to reset everything back to a state in which suspended
916  */
917 
918 static int i8042_resume(struct device *dev, u32 level)
919 {
920 	int i;
921 
922 	if (level != RESUME_ENABLE)
923 		return 0;
924 
925 	if (i8042_controller_init()) {
926 		printk(KERN_ERR "i8042: resume failed\n");
927 		return -1;
928 	}
929 
930 	if (i8042_mux_present)
931 		if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports())
932 			printk(KERN_WARNING "i8042: failed to resume active multiplexor, mouse won't work.\n");
933 
934 /*
935  * Activate all ports.
936  */
937 
938 	for (i = 0; i < I8042_NUM_PORTS; i++)
939 		i8042_activate_port(&i8042_ports[i]);
940 
941 /*
942  * Restart timer (for polling "stuck" data)
943  */
944 	mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
945 
946 	panic_blink = i8042_panic_blink;
947 
948 	return 0;
949 
950 }
951 
952 /*
953  * We need to reset the 8042 back to original mode on system shutdown,
954  * because otherwise BIOSes will be confused.
955  */
956 
957 static void i8042_shutdown(struct device *dev)
958 {
959 	i8042_controller_cleanup();
960 }
961 
962 static struct device_driver i8042_driver = {
963 	.name		= "i8042",
964 	.bus		= &platform_bus_type,
965 	.suspend	= i8042_suspend,
966 	.resume		= i8042_resume,
967 	.shutdown	= i8042_shutdown,
968 };
969 
970 static void __init i8042_create_kbd_port(void)
971 {
972 	struct serio *serio;
973 	struct i8042_port *port = &i8042_ports[I8042_KBD_PORT_NO];
974 
975 	serio = kmalloc(sizeof(struct serio), GFP_KERNEL);
976 	if (serio) {
977 		memset(serio, 0, sizeof(struct serio));
978 		serio->id.type		= i8042_direct ? SERIO_8042 : SERIO_8042_XL;
979 		serio->write		= i8042_dumbkbd ? NULL : i8042_kbd_write;
980 		serio->open		= i8042_open;
981 		serio->close		= i8042_close;
982 		serio->start		= i8042_start;
983 		serio->stop		= i8042_stop;
984 		serio->port_data	= port;
985 		serio->dev.parent	= &i8042_platform_device->dev;
986 		strlcpy(serio->name, "i8042 Kbd Port", sizeof(serio->name));
987 		strlcpy(serio->phys, I8042_KBD_PHYS_DESC, sizeof(serio->phys));
988 
989 		port->serio = serio;
990 		i8042_port_register(port);
991 	}
992 }
993 
994 static void __init i8042_create_aux_port(void)
995 {
996 	struct serio *serio;
997 	struct i8042_port *port = &i8042_ports[I8042_AUX_PORT_NO];
998 
999 	serio = kmalloc(sizeof(struct serio), GFP_KERNEL);
1000 	if (serio) {
1001 		memset(serio, 0, sizeof(struct serio));
1002 		serio->id.type		= SERIO_8042;
1003 		serio->write		= i8042_aux_write;
1004 		serio->open		= i8042_open;
1005 		serio->close		= i8042_close;
1006 		serio->start		= i8042_start;
1007 		serio->stop		= i8042_stop;
1008 		serio->port_data	= port;
1009 		serio->dev.parent	= &i8042_platform_device->dev;
1010 		strlcpy(serio->name, "i8042 Aux Port", sizeof(serio->name));
1011 		strlcpy(serio->phys, I8042_AUX_PHYS_DESC, sizeof(serio->phys));
1012 
1013 		port->serio = serio;
1014 		i8042_port_register(port);
1015 	}
1016 }
1017 
1018 static void __init i8042_create_mux_port(int index)
1019 {
1020 	struct serio *serio;
1021 	struct i8042_port *port = &i8042_ports[I8042_MUX_PORT_NO + index];
1022 
1023 	serio = kmalloc(sizeof(struct serio), GFP_KERNEL);
1024 	if (serio) {
1025 		memset(serio, 0, sizeof(struct serio));
1026 		serio->id.type		= SERIO_8042;
1027 		serio->write		= i8042_aux_write;
1028 		serio->open		= i8042_open;
1029 		serio->close		= i8042_close;
1030 		serio->start		= i8042_start;
1031 		serio->stop		= i8042_stop;
1032 		serio->port_data	= port;
1033 		serio->dev.parent	= &i8042_platform_device->dev;
1034 		snprintf(serio->name, sizeof(serio->name), "i8042 Aux-%d Port", index);
1035 		snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, index + 1);
1036 
1037 		*port = i8042_ports[I8042_AUX_PORT_NO];
1038 		port->exists = 0;
1039 		snprintf(port->name, sizeof(port->name), "AUX%d", index);
1040 		port->mux = index;
1041 		port->serio = serio;
1042 		i8042_port_register(port);
1043 	}
1044 }
1045 
1046 static int __init i8042_init(void)
1047 {
1048 	int i;
1049 	int err;
1050 
1051 	dbg_init();
1052 
1053 	init_timer(&i8042_timer);
1054 	i8042_timer.function = i8042_timer_func;
1055 
1056 	if (i8042_platform_init())
1057 		return -EBUSY;
1058 
1059 	i8042_ports[I8042_AUX_PORT_NO].irq = I8042_AUX_IRQ;
1060 	i8042_ports[I8042_KBD_PORT_NO].irq = I8042_KBD_IRQ;
1061 
1062 	if (i8042_controller_init()) {
1063 		i8042_platform_exit();
1064 		return -ENODEV;
1065 	}
1066 
1067 	err = driver_register(&i8042_driver);
1068 	if (err) {
1069 		i8042_platform_exit();
1070 		return err;
1071 	}
1072 
1073 	i8042_platform_device = platform_device_register_simple("i8042", -1, NULL, 0);
1074 	if (IS_ERR(i8042_platform_device)) {
1075 		driver_unregister(&i8042_driver);
1076 		i8042_platform_exit();
1077 		return PTR_ERR(i8042_platform_device);
1078 	}
1079 
1080 	if (!i8042_noaux && !i8042_check_aux()) {
1081 		if (!i8042_nomux && !i8042_check_mux())
1082 			for (i = 0; i < I8042_NUM_MUX_PORTS; i++)
1083 				i8042_create_mux_port(i);
1084 		else
1085 			i8042_create_aux_port();
1086 	}
1087 
1088 	i8042_create_kbd_port();
1089 
1090 	mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
1091 
1092 	return 0;
1093 }
1094 
1095 static void __exit i8042_exit(void)
1096 {
1097 	int i;
1098 
1099 	i8042_controller_cleanup();
1100 
1101 	for (i = 0; i < I8042_NUM_PORTS; i++)
1102 		if (i8042_ports[i].exists)
1103 			serio_unregister_port(i8042_ports[i].serio);
1104 
1105 	del_timer_sync(&i8042_timer);
1106 
1107 	platform_device_unregister(i8042_platform_device);
1108 	driver_unregister(&i8042_driver);
1109 
1110 	i8042_platform_exit();
1111 
1112 	panic_blink = NULL;
1113 }
1114 
1115 module_init(i8042_init);
1116 module_exit(i8042_exit);
1117