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(¶m, I8042_CMD_AUX_LOOP) || param != 0xf0) 515 return -1; 516 param = mode ? 0x56 : 0xf6; 517 if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != (mode ? 0x56 : 0xf6)) 518 return -1; 519 param = mode ? 0xa4 : 0xa5; 520 if (i8042_command(¶m, 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(¶m, I8042_CMD_MUX_PFX + i); 557 i8042_command(¶m, 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(¶m, 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(¶m, 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(¶m, I8042_CMD_AUX_DISABLE)) 646 return -1; 647 if (i8042_command(¶m, 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(¶m, I8042_CMD_AUX_ENABLE)) 653 return -1; 654 if (i8042_command(¶m, 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(¶m, 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); 1127