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(¶m, I8042_CMD_AUX_LOOP) || param != 0x0f) 511 return -1; 512 param = mode ? 0x56 : 0xf6; 513 if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != (mode ? 0xa9 : 0x09)) 514 return -1; 515 param = mode ? 0xa4 : 0xa5; 516 if (i8042_command(¶m, 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(¶m, I8042_CMD_MUX_PFX + i); 553 i8042_command(¶m, 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(¶m, 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(¶m, 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(¶m, I8042_CMD_AUX_DISABLE)) 642 return -1; 643 if (i8042_command(¶m, 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(¶m, I8042_CMD_AUX_ENABLE)) 649 return -1; 650 if (i8042_command(¶m, 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(¶m, 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(¶m, 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