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