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