1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * i8042 keyboard and mouse controller driver for Linux 4 * 5 * Copyright (c) 1999-2004 Vojtech Pavlik 6 */ 7 8 9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 10 11 #include <linux/types.h> 12 #include <linux/delay.h> 13 #include <linux/module.h> 14 #include <linux/interrupt.h> 15 #include <linux/ioport.h> 16 #include <linux/init.h> 17 #include <linux/serio.h> 18 #include <linux/err.h> 19 #include <linux/rcupdate.h> 20 #include <linux/platform_device.h> 21 #include <linux/i8042.h> 22 #include <linux/slab.h> 23 #include <linux/suspend.h> 24 #include <linux/property.h> 25 26 #include <asm/io.h> 27 28 MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>"); 29 MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver"); 30 MODULE_LICENSE("GPL"); 31 32 static bool i8042_nokbd; 33 module_param_named(nokbd, i8042_nokbd, bool, 0); 34 MODULE_PARM_DESC(nokbd, "Do not probe or use KBD port."); 35 36 static bool i8042_noaux; 37 module_param_named(noaux, i8042_noaux, bool, 0); 38 MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port."); 39 40 static bool i8042_nomux; 41 module_param_named(nomux, i8042_nomux, bool, 0); 42 MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present."); 43 44 static bool i8042_unlock; 45 module_param_named(unlock, i8042_unlock, bool, 0); 46 MODULE_PARM_DESC(unlock, "Ignore keyboard lock."); 47 48 enum i8042_controller_reset_mode { 49 I8042_RESET_NEVER, 50 I8042_RESET_ALWAYS, 51 I8042_RESET_ON_S2RAM, 52 #define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM 53 }; 54 static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT; 55 static int i8042_set_reset(const char *val, const struct kernel_param *kp) 56 { 57 enum i8042_controller_reset_mode *arg = kp->arg; 58 int error; 59 bool reset; 60 61 if (val) { 62 error = kstrtobool(val, &reset); 63 if (error) 64 return error; 65 } else { 66 reset = true; 67 } 68 69 *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER; 70 return 0; 71 } 72 73 static const struct kernel_param_ops param_ops_reset_param = { 74 .flags = KERNEL_PARAM_OPS_FL_NOARG, 75 .set = i8042_set_reset, 76 }; 77 #define param_check_reset_param(name, p) \ 78 __param_check(name, p, enum i8042_controller_reset_mode) 79 module_param_named(reset, i8042_reset, reset_param, 0); 80 MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both"); 81 82 static bool i8042_direct; 83 module_param_named(direct, i8042_direct, bool, 0); 84 MODULE_PARM_DESC(direct, "Put keyboard port into non-translated mode."); 85 86 static bool i8042_dumbkbd; 87 module_param_named(dumbkbd, i8042_dumbkbd, bool, 0); 88 MODULE_PARM_DESC(dumbkbd, "Pretend that controller can only read data from keyboard"); 89 90 static bool i8042_noloop; 91 module_param_named(noloop, i8042_noloop, bool, 0); 92 MODULE_PARM_DESC(noloop, "Disable the AUX Loopback command while probing for the AUX port"); 93 94 static bool i8042_notimeout; 95 module_param_named(notimeout, i8042_notimeout, bool, 0); 96 MODULE_PARM_DESC(notimeout, "Ignore timeouts signalled by i8042"); 97 98 static bool i8042_kbdreset; 99 module_param_named(kbdreset, i8042_kbdreset, bool, 0); 100 MODULE_PARM_DESC(kbdreset, "Reset device connected to KBD port"); 101 102 #ifdef CONFIG_X86 103 static bool i8042_dritek; 104 module_param_named(dritek, i8042_dritek, bool, 0); 105 MODULE_PARM_DESC(dritek, "Force enable the Dritek keyboard extension"); 106 #endif 107 108 #ifdef CONFIG_PNP 109 static bool i8042_nopnp; 110 module_param_named(nopnp, i8042_nopnp, bool, 0); 111 MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings"); 112 #endif 113 114 #define DEBUG 115 #ifdef DEBUG 116 static bool i8042_debug; 117 module_param_named(debug, i8042_debug, bool, 0600); 118 MODULE_PARM_DESC(debug, "Turn i8042 debugging mode on and off"); 119 120 static bool i8042_unmask_kbd_data; 121 module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600); 122 MODULE_PARM_DESC(unmask_kbd_data, "Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]"); 123 #endif 124 125 static bool i8042_bypass_aux_irq_test; 126 static char i8042_kbd_firmware_id[128]; 127 static char i8042_aux_firmware_id[128]; 128 static struct fwnode_handle *i8042_kbd_fwnode; 129 130 #include "i8042.h" 131 132 /* 133 * i8042_lock protects serialization between i8042_command and 134 * the interrupt handler. 135 */ 136 static DEFINE_SPINLOCK(i8042_lock); 137 138 /* 139 * Writers to AUX and KBD ports as well as users issuing i8042_command 140 * directly should acquire i8042_mutex (by means of calling 141 * i8042_lock_chip() and i8042_unlock_ship() helpers) to ensure that 142 * they do not disturb each other (unfortunately in many i8042 143 * implementations write to one of the ports will immediately abort 144 * command that is being processed by another port). 145 */ 146 static DEFINE_MUTEX(i8042_mutex); 147 148 struct i8042_port { 149 struct serio *serio; 150 int irq; 151 bool exists; 152 bool driver_bound; 153 signed char mux; 154 }; 155 156 #define I8042_KBD_PORT_NO 0 157 #define I8042_AUX_PORT_NO 1 158 #define I8042_MUX_PORT_NO 2 159 #define I8042_NUM_PORTS (I8042_NUM_MUX_PORTS + 2) 160 161 static struct i8042_port i8042_ports[I8042_NUM_PORTS]; 162 163 static unsigned char i8042_initial_ctr; 164 static unsigned char i8042_ctr; 165 static bool i8042_mux_present; 166 static bool i8042_kbd_irq_registered; 167 static bool i8042_aux_irq_registered; 168 static unsigned char i8042_suppress_kbd_ack; 169 static struct platform_device *i8042_platform_device; 170 static struct notifier_block i8042_kbd_bind_notifier_block; 171 172 static irqreturn_t i8042_interrupt(int irq, void *dev_id); 173 static bool (*i8042_platform_filter)(unsigned char data, unsigned char str, 174 struct serio *serio); 175 176 void i8042_lock_chip(void) 177 { 178 mutex_lock(&i8042_mutex); 179 } 180 EXPORT_SYMBOL(i8042_lock_chip); 181 182 void i8042_unlock_chip(void) 183 { 184 mutex_unlock(&i8042_mutex); 185 } 186 EXPORT_SYMBOL(i8042_unlock_chip); 187 188 int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str, 189 struct serio *serio)) 190 { 191 unsigned long flags; 192 int ret = 0; 193 194 spin_lock_irqsave(&i8042_lock, flags); 195 196 if (i8042_platform_filter) { 197 ret = -EBUSY; 198 goto out; 199 } 200 201 i8042_platform_filter = filter; 202 203 out: 204 spin_unlock_irqrestore(&i8042_lock, flags); 205 return ret; 206 } 207 EXPORT_SYMBOL(i8042_install_filter); 208 209 int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str, 210 struct serio *port)) 211 { 212 unsigned long flags; 213 int ret = 0; 214 215 spin_lock_irqsave(&i8042_lock, flags); 216 217 if (i8042_platform_filter != filter) { 218 ret = -EINVAL; 219 goto out; 220 } 221 222 i8042_platform_filter = NULL; 223 224 out: 225 spin_unlock_irqrestore(&i8042_lock, flags); 226 return ret; 227 } 228 EXPORT_SYMBOL(i8042_remove_filter); 229 230 /* 231 * The i8042_wait_read() and i8042_wait_write functions wait for the i8042 to 232 * be ready for reading values from it / writing values to it. 233 * Called always with i8042_lock held. 234 */ 235 236 static int i8042_wait_read(void) 237 { 238 int i = 0; 239 240 while ((~i8042_read_status() & I8042_STR_OBF) && (i < I8042_CTL_TIMEOUT)) { 241 udelay(50); 242 i++; 243 } 244 return -(i == I8042_CTL_TIMEOUT); 245 } 246 247 static int i8042_wait_write(void) 248 { 249 int i = 0; 250 251 while ((i8042_read_status() & I8042_STR_IBF) && (i < I8042_CTL_TIMEOUT)) { 252 udelay(50); 253 i++; 254 } 255 return -(i == I8042_CTL_TIMEOUT); 256 } 257 258 /* 259 * i8042_flush() flushes all data that may be in the keyboard and mouse buffers 260 * of the i8042 down the toilet. 261 */ 262 263 static int i8042_flush(void) 264 { 265 unsigned long flags; 266 unsigned char data, str; 267 int count = 0; 268 int retval = 0; 269 270 spin_lock_irqsave(&i8042_lock, flags); 271 272 while ((str = i8042_read_status()) & I8042_STR_OBF) { 273 if (count++ < I8042_BUFFER_SIZE) { 274 udelay(50); 275 data = i8042_read_data(); 276 dbg("%02x <- i8042 (flush, %s)\n", 277 data, str & I8042_STR_AUXDATA ? "aux" : "kbd"); 278 } else { 279 retval = -EIO; 280 break; 281 } 282 } 283 284 spin_unlock_irqrestore(&i8042_lock, flags); 285 286 return retval; 287 } 288 289 /* 290 * i8042_command() executes a command on the i8042. It also sends the input 291 * parameter(s) of the commands to it, and receives the output value(s). The 292 * parameters are to be stored in the param array, and the output is placed 293 * into the same array. The number of the parameters and output values is 294 * encoded in bits 8-11 of the command number. 295 */ 296 297 static int __i8042_command(unsigned char *param, int command) 298 { 299 int i, error; 300 301 if (i8042_noloop && command == I8042_CMD_AUX_LOOP) 302 return -1; 303 304 error = i8042_wait_write(); 305 if (error) 306 return error; 307 308 dbg("%02x -> i8042 (command)\n", command & 0xff); 309 i8042_write_command(command & 0xff); 310 311 for (i = 0; i < ((command >> 12) & 0xf); i++) { 312 error = i8042_wait_write(); 313 if (error) { 314 dbg(" -- i8042 (wait write timeout)\n"); 315 return error; 316 } 317 dbg("%02x -> i8042 (parameter)\n", param[i]); 318 i8042_write_data(param[i]); 319 } 320 321 for (i = 0; i < ((command >> 8) & 0xf); i++) { 322 error = i8042_wait_read(); 323 if (error) { 324 dbg(" -- i8042 (wait read timeout)\n"); 325 return error; 326 } 327 328 if (command == I8042_CMD_AUX_LOOP && 329 !(i8042_read_status() & I8042_STR_AUXDATA)) { 330 dbg(" -- i8042 (auxerr)\n"); 331 return -1; 332 } 333 334 param[i] = i8042_read_data(); 335 dbg("%02x <- i8042 (return)\n", param[i]); 336 } 337 338 return 0; 339 } 340 341 int i8042_command(unsigned char *param, int command) 342 { 343 unsigned long flags; 344 int retval; 345 346 spin_lock_irqsave(&i8042_lock, flags); 347 retval = __i8042_command(param, command); 348 spin_unlock_irqrestore(&i8042_lock, flags); 349 350 return retval; 351 } 352 EXPORT_SYMBOL(i8042_command); 353 354 /* 355 * i8042_kbd_write() sends a byte out through the keyboard interface. 356 */ 357 358 static int i8042_kbd_write(struct serio *port, unsigned char c) 359 { 360 unsigned long flags; 361 int retval = 0; 362 363 spin_lock_irqsave(&i8042_lock, flags); 364 365 if (!(retval = i8042_wait_write())) { 366 dbg("%02x -> i8042 (kbd-data)\n", c); 367 i8042_write_data(c); 368 } 369 370 spin_unlock_irqrestore(&i8042_lock, flags); 371 372 return retval; 373 } 374 375 /* 376 * i8042_aux_write() sends a byte out through the aux interface. 377 */ 378 379 static int i8042_aux_write(struct serio *serio, unsigned char c) 380 { 381 struct i8042_port *port = serio->port_data; 382 383 return i8042_command(&c, port->mux == -1 ? 384 I8042_CMD_AUX_SEND : 385 I8042_CMD_MUX_SEND + port->mux); 386 } 387 388 389 /* 390 * i8042_port_close attempts to clear AUX or KBD port state by disabling 391 * and then re-enabling it. 392 */ 393 394 static void i8042_port_close(struct serio *serio) 395 { 396 int irq_bit; 397 int disable_bit; 398 const char *port_name; 399 400 if (serio == i8042_ports[I8042_AUX_PORT_NO].serio) { 401 irq_bit = I8042_CTR_AUXINT; 402 disable_bit = I8042_CTR_AUXDIS; 403 port_name = "AUX"; 404 } else { 405 irq_bit = I8042_CTR_KBDINT; 406 disable_bit = I8042_CTR_KBDDIS; 407 port_name = "KBD"; 408 } 409 410 i8042_ctr &= ~irq_bit; 411 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) 412 pr_warn("Can't write CTR while closing %s port\n", port_name); 413 414 udelay(50); 415 416 i8042_ctr &= ~disable_bit; 417 i8042_ctr |= irq_bit; 418 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) 419 pr_err("Can't reactivate %s port\n", port_name); 420 421 /* 422 * See if there is any data appeared while we were messing with 423 * port state. 424 */ 425 i8042_interrupt(0, NULL); 426 } 427 428 /* 429 * i8042_start() is called by serio core when port is about to finish 430 * registering. It will mark port as existing so i8042_interrupt can 431 * start sending data through it. 432 */ 433 static int i8042_start(struct serio *serio) 434 { 435 struct i8042_port *port = serio->port_data; 436 437 device_set_wakeup_capable(&serio->dev, true); 438 439 /* 440 * On platforms using suspend-to-idle, allow the keyboard to 441 * wake up the system from sleep by enabling keyboard wakeups 442 * by default. This is consistent with keyboard wakeup 443 * behavior on many platforms using suspend-to-RAM (ACPI S3) 444 * by default. 445 */ 446 if (pm_suspend_default_s2idle() && 447 serio == i8042_ports[I8042_KBD_PORT_NO].serio) { 448 device_set_wakeup_enable(&serio->dev, true); 449 } 450 451 spin_lock_irq(&i8042_lock); 452 port->exists = true; 453 spin_unlock_irq(&i8042_lock); 454 455 return 0; 456 } 457 458 /* 459 * i8042_stop() marks serio port as non-existing so i8042_interrupt 460 * will not try to send data to the port that is about to go away. 461 * The function is called by serio core as part of unregister procedure. 462 */ 463 static void i8042_stop(struct serio *serio) 464 { 465 struct i8042_port *port = serio->port_data; 466 467 spin_lock_irq(&i8042_lock); 468 port->exists = false; 469 port->serio = NULL; 470 spin_unlock_irq(&i8042_lock); 471 472 /* 473 * We need to make sure that interrupt handler finishes using 474 * our serio port before we return from this function. 475 * We synchronize with both AUX and KBD IRQs because there is 476 * a (very unlikely) chance that AUX IRQ is raised for KBD port 477 * and vice versa. 478 */ 479 synchronize_irq(I8042_AUX_IRQ); 480 synchronize_irq(I8042_KBD_IRQ); 481 } 482 483 /* 484 * i8042_filter() filters out unwanted bytes from the input data stream. 485 * It is called from i8042_interrupt and thus is running with interrupts 486 * off and i8042_lock held. 487 */ 488 static bool i8042_filter(unsigned char data, unsigned char str, 489 struct serio *serio) 490 { 491 if (unlikely(i8042_suppress_kbd_ack)) { 492 if ((~str & I8042_STR_AUXDATA) && 493 (data == 0xfa || data == 0xfe)) { 494 i8042_suppress_kbd_ack--; 495 dbg("Extra keyboard ACK - filtered out\n"); 496 return true; 497 } 498 } 499 500 if (i8042_platform_filter && i8042_platform_filter(data, str, serio)) { 501 dbg("Filtered out by platform filter\n"); 502 return true; 503 } 504 505 return false; 506 } 507 508 /* 509 * i8042_interrupt() is the most important function in this driver - 510 * it handles the interrupts from the i8042, and sends incoming bytes 511 * to the upper layers. 512 */ 513 514 static irqreturn_t i8042_interrupt(int irq, void *dev_id) 515 { 516 struct i8042_port *port; 517 struct serio *serio; 518 unsigned long flags; 519 unsigned char str, data; 520 unsigned int dfl; 521 unsigned int port_no; 522 bool filtered; 523 int ret = 1; 524 525 spin_lock_irqsave(&i8042_lock, flags); 526 527 str = i8042_read_status(); 528 if (unlikely(~str & I8042_STR_OBF)) { 529 spin_unlock_irqrestore(&i8042_lock, flags); 530 if (irq) 531 dbg("Interrupt %d, without any data\n", irq); 532 ret = 0; 533 goto out; 534 } 535 536 data = i8042_read_data(); 537 538 if (i8042_mux_present && (str & I8042_STR_AUXDATA)) { 539 static unsigned long last_transmit; 540 static unsigned char last_str; 541 542 dfl = 0; 543 if (str & I8042_STR_MUXERR) { 544 dbg("MUX error, status is %02x, data is %02x\n", 545 str, data); 546 /* 547 * When MUXERR condition is signalled the data register can only contain 548 * 0xfd, 0xfe or 0xff if implementation follows the spec. Unfortunately 549 * it is not always the case. Some KBCs also report 0xfc when there is 550 * nothing connected to the port while others sometimes get confused which 551 * port the data came from and signal error leaving the data intact. They 552 * _do not_ revert to legacy mode (actually I've never seen KBC reverting 553 * to legacy mode yet, when we see one we'll add proper handling). 554 * Anyway, we process 0xfc, 0xfd, 0xfe and 0xff as timeouts, and for the 555 * rest assume that the data came from the same serio last byte 556 * was transmitted (if transmission happened not too long ago). 557 */ 558 559 switch (data) { 560 default: 561 if (time_before(jiffies, last_transmit + HZ/10)) { 562 str = last_str; 563 break; 564 } 565 /* fall through - report timeout */ 566 case 0xfc: 567 case 0xfd: 568 case 0xfe: dfl = SERIO_TIMEOUT; data = 0xfe; break; 569 case 0xff: dfl = SERIO_PARITY; data = 0xfe; break; 570 } 571 } 572 573 port_no = I8042_MUX_PORT_NO + ((str >> 6) & 3); 574 last_str = str; 575 last_transmit = jiffies; 576 } else { 577 578 dfl = ((str & I8042_STR_PARITY) ? SERIO_PARITY : 0) | 579 ((str & I8042_STR_TIMEOUT && !i8042_notimeout) ? SERIO_TIMEOUT : 0); 580 581 port_no = (str & I8042_STR_AUXDATA) ? 582 I8042_AUX_PORT_NO : I8042_KBD_PORT_NO; 583 } 584 585 port = &i8042_ports[port_no]; 586 serio = port->exists ? port->serio : NULL; 587 588 filter_dbg(port->driver_bound, data, "<- i8042 (interrupt, %d, %d%s%s)\n", 589 port_no, irq, 590 dfl & SERIO_PARITY ? ", bad parity" : "", 591 dfl & SERIO_TIMEOUT ? ", timeout" : ""); 592 593 filtered = i8042_filter(data, str, serio); 594 595 spin_unlock_irqrestore(&i8042_lock, flags); 596 597 if (likely(serio && !filtered)) 598 serio_interrupt(serio, data, dfl); 599 600 out: 601 return IRQ_RETVAL(ret); 602 } 603 604 /* 605 * i8042_enable_kbd_port enables keyboard port on chip 606 */ 607 608 static int i8042_enable_kbd_port(void) 609 { 610 i8042_ctr &= ~I8042_CTR_KBDDIS; 611 i8042_ctr |= I8042_CTR_KBDINT; 612 613 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 614 i8042_ctr &= ~I8042_CTR_KBDINT; 615 i8042_ctr |= I8042_CTR_KBDDIS; 616 pr_err("Failed to enable KBD port\n"); 617 return -EIO; 618 } 619 620 return 0; 621 } 622 623 /* 624 * i8042_enable_aux_port enables AUX (mouse) port on chip 625 */ 626 627 static int i8042_enable_aux_port(void) 628 { 629 i8042_ctr &= ~I8042_CTR_AUXDIS; 630 i8042_ctr |= I8042_CTR_AUXINT; 631 632 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 633 i8042_ctr &= ~I8042_CTR_AUXINT; 634 i8042_ctr |= I8042_CTR_AUXDIS; 635 pr_err("Failed to enable AUX port\n"); 636 return -EIO; 637 } 638 639 return 0; 640 } 641 642 /* 643 * i8042_enable_mux_ports enables 4 individual AUX ports after 644 * the controller has been switched into Multiplexed mode 645 */ 646 647 static int i8042_enable_mux_ports(void) 648 { 649 unsigned char param; 650 int i; 651 652 for (i = 0; i < I8042_NUM_MUX_PORTS; i++) { 653 i8042_command(¶m, I8042_CMD_MUX_PFX + i); 654 i8042_command(¶m, I8042_CMD_AUX_ENABLE); 655 } 656 657 return i8042_enable_aux_port(); 658 } 659 660 /* 661 * i8042_set_mux_mode checks whether the controller has an 662 * active multiplexor and puts the chip into Multiplexed (true) 663 * or Legacy (false) mode. 664 */ 665 666 static int i8042_set_mux_mode(bool multiplex, unsigned char *mux_version) 667 { 668 669 unsigned char param, val; 670 /* 671 * Get rid of bytes in the queue. 672 */ 673 674 i8042_flush(); 675 676 /* 677 * Internal loopback test - send three bytes, they should come back from the 678 * mouse interface, the last should be version. 679 */ 680 681 param = val = 0xf0; 682 if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != val) 683 return -1; 684 param = val = multiplex ? 0x56 : 0xf6; 685 if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != val) 686 return -1; 687 param = val = multiplex ? 0xa4 : 0xa5; 688 if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param == val) 689 return -1; 690 691 /* 692 * Workaround for interference with USB Legacy emulation 693 * that causes a v10.12 MUX to be found. 694 */ 695 if (param == 0xac) 696 return -1; 697 698 if (mux_version) 699 *mux_version = param; 700 701 return 0; 702 } 703 704 /* 705 * i8042_check_mux() checks whether the controller supports the PS/2 Active 706 * Multiplexing specification by Synaptics, Phoenix, Insyde and 707 * LCS/Telegraphics. 708 */ 709 710 static int __init i8042_check_mux(void) 711 { 712 unsigned char mux_version; 713 714 if (i8042_set_mux_mode(true, &mux_version)) 715 return -1; 716 717 pr_info("Detected active multiplexing controller, rev %d.%d\n", 718 (mux_version >> 4) & 0xf, mux_version & 0xf); 719 720 /* 721 * Disable all muxed ports by disabling AUX. 722 */ 723 i8042_ctr |= I8042_CTR_AUXDIS; 724 i8042_ctr &= ~I8042_CTR_AUXINT; 725 726 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 727 pr_err("Failed to disable AUX port, can't use MUX\n"); 728 return -EIO; 729 } 730 731 i8042_mux_present = true; 732 733 return 0; 734 } 735 736 /* 737 * The following is used to test AUX IRQ delivery. 738 */ 739 static struct completion i8042_aux_irq_delivered __initdata; 740 static bool i8042_irq_being_tested __initdata; 741 742 static irqreturn_t __init i8042_aux_test_irq(int irq, void *dev_id) 743 { 744 unsigned long flags; 745 unsigned char str, data; 746 int ret = 0; 747 748 spin_lock_irqsave(&i8042_lock, flags); 749 str = i8042_read_status(); 750 if (str & I8042_STR_OBF) { 751 data = i8042_read_data(); 752 dbg("%02x <- i8042 (aux_test_irq, %s)\n", 753 data, str & I8042_STR_AUXDATA ? "aux" : "kbd"); 754 if (i8042_irq_being_tested && 755 data == 0xa5 && (str & I8042_STR_AUXDATA)) 756 complete(&i8042_aux_irq_delivered); 757 ret = 1; 758 } 759 spin_unlock_irqrestore(&i8042_lock, flags); 760 761 return IRQ_RETVAL(ret); 762 } 763 764 /* 765 * i8042_toggle_aux - enables or disables AUX port on i8042 via command and 766 * verifies success by readinng CTR. Used when testing for presence of AUX 767 * port. 768 */ 769 static int __init i8042_toggle_aux(bool on) 770 { 771 unsigned char param; 772 int i; 773 774 if (i8042_command(¶m, 775 on ? I8042_CMD_AUX_ENABLE : I8042_CMD_AUX_DISABLE)) 776 return -1; 777 778 /* some chips need some time to set the I8042_CTR_AUXDIS bit */ 779 for (i = 0; i < 100; i++) { 780 udelay(50); 781 782 if (i8042_command(¶m, I8042_CMD_CTL_RCTR)) 783 return -1; 784 785 if (!(param & I8042_CTR_AUXDIS) == on) 786 return 0; 787 } 788 789 return -1; 790 } 791 792 /* 793 * i8042_check_aux() applies as much paranoia as it can at detecting 794 * the presence of an AUX interface. 795 */ 796 797 static int __init i8042_check_aux(void) 798 { 799 int retval = -1; 800 bool irq_registered = false; 801 bool aux_loop_broken = false; 802 unsigned long flags; 803 unsigned char param; 804 805 /* 806 * Get rid of bytes in the queue. 807 */ 808 809 i8042_flush(); 810 811 /* 812 * Internal loopback test - filters out AT-type i8042's. Unfortunately 813 * SiS screwed up and their 5597 doesn't support the LOOP command even 814 * though it has an AUX port. 815 */ 816 817 param = 0x5a; 818 retval = i8042_command(¶m, I8042_CMD_AUX_LOOP); 819 if (retval || param != 0x5a) { 820 821 /* 822 * External connection test - filters out AT-soldered PS/2 i8042's 823 * 0x00 - no error, 0x01-0x03 - clock/data stuck, 0xff - general error 824 * 0xfa - no error on some notebooks which ignore the spec 825 * Because it's common for chipsets to return error on perfectly functioning 826 * AUX ports, we test for this only when the LOOP command failed. 827 */ 828 829 if (i8042_command(¶m, I8042_CMD_AUX_TEST) || 830 (param && param != 0xfa && param != 0xff)) 831 return -1; 832 833 /* 834 * If AUX_LOOP completed without error but returned unexpected data 835 * mark it as broken 836 */ 837 if (!retval) 838 aux_loop_broken = true; 839 } 840 841 /* 842 * Bit assignment test - filters out PS/2 i8042's in AT mode 843 */ 844 845 if (i8042_toggle_aux(false)) { 846 pr_warn("Failed to disable AUX port, but continuing anyway... Is this a SiS?\n"); 847 pr_warn("If AUX port is really absent please use the 'i8042.noaux' option\n"); 848 } 849 850 if (i8042_toggle_aux(true)) 851 return -1; 852 853 /* 854 * Reset keyboard (needed on some laptops to successfully detect 855 * touchpad, e.g., some Gigabyte laptop models with Elantech 856 * touchpads). 857 */ 858 if (i8042_kbdreset) { 859 pr_warn("Attempting to reset device connected to KBD port\n"); 860 i8042_kbd_write(NULL, (unsigned char) 0xff); 861 } 862 863 /* 864 * Test AUX IRQ delivery to make sure BIOS did not grab the IRQ and 865 * used it for a PCI card or somethig else. 866 */ 867 868 if (i8042_noloop || i8042_bypass_aux_irq_test || aux_loop_broken) { 869 /* 870 * Without LOOP command we can't test AUX IRQ delivery. Assume the port 871 * is working and hope we are right. 872 */ 873 retval = 0; 874 goto out; 875 } 876 877 if (request_irq(I8042_AUX_IRQ, i8042_aux_test_irq, IRQF_SHARED, 878 "i8042", i8042_platform_device)) 879 goto out; 880 881 irq_registered = true; 882 883 if (i8042_enable_aux_port()) 884 goto out; 885 886 spin_lock_irqsave(&i8042_lock, flags); 887 888 init_completion(&i8042_aux_irq_delivered); 889 i8042_irq_being_tested = true; 890 891 param = 0xa5; 892 retval = __i8042_command(¶m, I8042_CMD_AUX_LOOP & 0xf0ff); 893 894 spin_unlock_irqrestore(&i8042_lock, flags); 895 896 if (retval) 897 goto out; 898 899 if (wait_for_completion_timeout(&i8042_aux_irq_delivered, 900 msecs_to_jiffies(250)) == 0) { 901 /* 902 * AUX IRQ was never delivered so we need to flush the controller to 903 * get rid of the byte we put there; otherwise keyboard may not work. 904 */ 905 dbg(" -- i8042 (aux irq test timeout)\n"); 906 i8042_flush(); 907 retval = -1; 908 } 909 910 out: 911 912 /* 913 * Disable the interface. 914 */ 915 916 i8042_ctr |= I8042_CTR_AUXDIS; 917 i8042_ctr &= ~I8042_CTR_AUXINT; 918 919 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) 920 retval = -1; 921 922 if (irq_registered) 923 free_irq(I8042_AUX_IRQ, i8042_platform_device); 924 925 return retval; 926 } 927 928 static int i8042_controller_check(void) 929 { 930 if (i8042_flush()) { 931 pr_info("No controller found\n"); 932 return -ENODEV; 933 } 934 935 return 0; 936 } 937 938 static int i8042_controller_selftest(void) 939 { 940 unsigned char param; 941 int i = 0; 942 943 /* 944 * We try this 5 times; on some really fragile systems this does not 945 * take the first time... 946 */ 947 do { 948 949 if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { 950 pr_err("i8042 controller selftest timeout\n"); 951 return -ENODEV; 952 } 953 954 if (param == I8042_RET_CTL_TEST) 955 return 0; 956 957 dbg("i8042 controller selftest: %#x != %#x\n", 958 param, I8042_RET_CTL_TEST); 959 msleep(50); 960 } while (i++ < 5); 961 962 #ifdef CONFIG_X86 963 /* 964 * On x86, we don't fail entire i8042 initialization if controller 965 * reset fails in hopes that keyboard port will still be functional 966 * and user will still get a working keyboard. This is especially 967 * important on netbooks. On other arches we trust hardware more. 968 */ 969 pr_info("giving up on controller selftest, continuing anyway...\n"); 970 return 0; 971 #else 972 pr_err("i8042 controller selftest failed\n"); 973 return -EIO; 974 #endif 975 } 976 977 /* 978 * i8042_controller init initializes the i8042 controller, and, 979 * most importantly, sets it into non-xlated mode if that's 980 * desired. 981 */ 982 983 static int i8042_controller_init(void) 984 { 985 unsigned long flags; 986 int n = 0; 987 unsigned char ctr[2]; 988 989 /* 990 * Save the CTR for restore on unload / reboot. 991 */ 992 993 do { 994 if (n >= 10) { 995 pr_err("Unable to get stable CTR read\n"); 996 return -EIO; 997 } 998 999 if (n != 0) 1000 udelay(50); 1001 1002 if (i8042_command(&ctr[n++ % 2], I8042_CMD_CTL_RCTR)) { 1003 pr_err("Can't read CTR while initializing i8042\n"); 1004 return -EIO; 1005 } 1006 1007 } while (n < 2 || ctr[0] != ctr[1]); 1008 1009 i8042_initial_ctr = i8042_ctr = ctr[0]; 1010 1011 /* 1012 * Disable the keyboard interface and interrupt. 1013 */ 1014 1015 i8042_ctr |= I8042_CTR_KBDDIS; 1016 i8042_ctr &= ~I8042_CTR_KBDINT; 1017 1018 /* 1019 * Handle keylock. 1020 */ 1021 1022 spin_lock_irqsave(&i8042_lock, flags); 1023 if (~i8042_read_status() & I8042_STR_KEYLOCK) { 1024 if (i8042_unlock) 1025 i8042_ctr |= I8042_CTR_IGNKEYLOCK; 1026 else 1027 pr_warn("Warning: Keylock active\n"); 1028 } 1029 spin_unlock_irqrestore(&i8042_lock, flags); 1030 1031 /* 1032 * If the chip is configured into nontranslated mode by the BIOS, don't 1033 * bother enabling translating and be happy. 1034 */ 1035 1036 if (~i8042_ctr & I8042_CTR_XLATE) 1037 i8042_direct = true; 1038 1039 /* 1040 * Set nontranslated mode for the kbd interface if requested by an option. 1041 * After this the kbd interface becomes a simple serial in/out, like the aux 1042 * interface is. We don't do this by default, since it can confuse notebook 1043 * BIOSes. 1044 */ 1045 1046 if (i8042_direct) 1047 i8042_ctr &= ~I8042_CTR_XLATE; 1048 1049 /* 1050 * Write CTR back. 1051 */ 1052 1053 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 1054 pr_err("Can't write CTR while initializing i8042\n"); 1055 return -EIO; 1056 } 1057 1058 /* 1059 * Flush whatever accumulated while we were disabling keyboard port. 1060 */ 1061 1062 i8042_flush(); 1063 1064 return 0; 1065 } 1066 1067 1068 /* 1069 * Reset the controller and reset CRT to the original value set by BIOS. 1070 */ 1071 1072 static void i8042_controller_reset(bool s2r_wants_reset) 1073 { 1074 i8042_flush(); 1075 1076 /* 1077 * Disable both KBD and AUX interfaces so they don't get in the way 1078 */ 1079 1080 i8042_ctr |= I8042_CTR_KBDDIS | I8042_CTR_AUXDIS; 1081 i8042_ctr &= ~(I8042_CTR_KBDINT | I8042_CTR_AUXINT); 1082 1083 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) 1084 pr_warn("Can't write CTR while resetting\n"); 1085 1086 /* 1087 * Disable MUX mode if present. 1088 */ 1089 1090 if (i8042_mux_present) 1091 i8042_set_mux_mode(false, NULL); 1092 1093 /* 1094 * Reset the controller if requested. 1095 */ 1096 1097 if (i8042_reset == I8042_RESET_ALWAYS || 1098 (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { 1099 i8042_controller_selftest(); 1100 } 1101 1102 /* 1103 * Restore the original control register setting. 1104 */ 1105 1106 if (i8042_command(&i8042_initial_ctr, I8042_CMD_CTL_WCTR)) 1107 pr_warn("Can't restore CTR\n"); 1108 } 1109 1110 1111 /* 1112 * i8042_panic_blink() will turn the keyboard LEDs on or off and is called 1113 * when kernel panics. Flashing LEDs is useful for users running X who may 1114 * not see the console and will help distinguishing panics from "real" 1115 * lockups. 1116 * 1117 * Note that DELAY has a limit of 10ms so we will not get stuck here 1118 * waiting for KBC to free up even if KBD interrupt is off 1119 */ 1120 1121 #define DELAY do { mdelay(1); if (++delay > 10) return delay; } while(0) 1122 1123 static long i8042_panic_blink(int state) 1124 { 1125 long delay = 0; 1126 char led; 1127 1128 led = (state) ? 0x01 | 0x04 : 0; 1129 while (i8042_read_status() & I8042_STR_IBF) 1130 DELAY; 1131 dbg("%02x -> i8042 (panic blink)\n", 0xed); 1132 i8042_suppress_kbd_ack = 2; 1133 i8042_write_data(0xed); /* set leds */ 1134 DELAY; 1135 while (i8042_read_status() & I8042_STR_IBF) 1136 DELAY; 1137 DELAY; 1138 dbg("%02x -> i8042 (panic blink)\n", led); 1139 i8042_write_data(led); 1140 DELAY; 1141 return delay; 1142 } 1143 1144 #undef DELAY 1145 1146 #ifdef CONFIG_X86 1147 static void i8042_dritek_enable(void) 1148 { 1149 unsigned char param = 0x90; 1150 int error; 1151 1152 error = i8042_command(¶m, 0x1059); 1153 if (error) 1154 pr_warn("Failed to enable DRITEK extension: %d\n", error); 1155 } 1156 #endif 1157 1158 #ifdef CONFIG_PM 1159 1160 /* 1161 * Here we try to reset everything back to a state we had 1162 * before suspending. 1163 */ 1164 1165 static int i8042_controller_resume(bool s2r_wants_reset) 1166 { 1167 int error; 1168 1169 error = i8042_controller_check(); 1170 if (error) 1171 return error; 1172 1173 if (i8042_reset == I8042_RESET_ALWAYS || 1174 (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { 1175 error = i8042_controller_selftest(); 1176 if (error) 1177 return error; 1178 } 1179 1180 /* 1181 * Restore original CTR value and disable all ports 1182 */ 1183 1184 i8042_ctr = i8042_initial_ctr; 1185 if (i8042_direct) 1186 i8042_ctr &= ~I8042_CTR_XLATE; 1187 i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS; 1188 i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT); 1189 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 1190 pr_warn("Can't write CTR to resume, retrying...\n"); 1191 msleep(50); 1192 if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { 1193 pr_err("CTR write retry failed\n"); 1194 return -EIO; 1195 } 1196 } 1197 1198 1199 #ifdef CONFIG_X86 1200 if (i8042_dritek) 1201 i8042_dritek_enable(); 1202 #endif 1203 1204 if (i8042_mux_present) { 1205 if (i8042_set_mux_mode(true, NULL) || i8042_enable_mux_ports()) 1206 pr_warn("failed to resume active multiplexor, mouse won't work\n"); 1207 } else if (i8042_ports[I8042_AUX_PORT_NO].serio) 1208 i8042_enable_aux_port(); 1209 1210 if (i8042_ports[I8042_KBD_PORT_NO].serio) 1211 i8042_enable_kbd_port(); 1212 1213 i8042_interrupt(0, NULL); 1214 1215 return 0; 1216 } 1217 1218 /* 1219 * Here we try to restore the original BIOS settings to avoid 1220 * upsetting it. 1221 */ 1222 1223 static int i8042_pm_suspend(struct device *dev) 1224 { 1225 int i; 1226 1227 if (pm_suspend_via_firmware()) 1228 i8042_controller_reset(true); 1229 1230 /* Set up serio interrupts for system wakeup. */ 1231 for (i = 0; i < I8042_NUM_PORTS; i++) { 1232 struct serio *serio = i8042_ports[i].serio; 1233 1234 if (serio && device_may_wakeup(&serio->dev)) 1235 enable_irq_wake(i8042_ports[i].irq); 1236 } 1237 1238 return 0; 1239 } 1240 1241 static int i8042_pm_resume_noirq(struct device *dev) 1242 { 1243 if (!pm_resume_via_firmware()) 1244 i8042_interrupt(0, NULL); 1245 1246 return 0; 1247 } 1248 1249 static int i8042_pm_resume(struct device *dev) 1250 { 1251 bool want_reset; 1252 int i; 1253 1254 for (i = 0; i < I8042_NUM_PORTS; i++) { 1255 struct serio *serio = i8042_ports[i].serio; 1256 1257 if (serio && device_may_wakeup(&serio->dev)) 1258 disable_irq_wake(i8042_ports[i].irq); 1259 } 1260 1261 /* 1262 * If platform firmware was not going to be involved in suspend, we did 1263 * not restore the controller state to whatever it had been at boot 1264 * time, so we do not need to do anything. 1265 */ 1266 if (!pm_suspend_via_firmware()) 1267 return 0; 1268 1269 /* 1270 * We only need to reset the controller if we are resuming after handing 1271 * off control to the platform firmware, otherwise we can simply restore 1272 * the mode. 1273 */ 1274 want_reset = pm_resume_via_firmware(); 1275 1276 return i8042_controller_resume(want_reset); 1277 } 1278 1279 static int i8042_pm_thaw(struct device *dev) 1280 { 1281 i8042_interrupt(0, NULL); 1282 1283 return 0; 1284 } 1285 1286 static int i8042_pm_reset(struct device *dev) 1287 { 1288 i8042_controller_reset(false); 1289 1290 return 0; 1291 } 1292 1293 static int i8042_pm_restore(struct device *dev) 1294 { 1295 return i8042_controller_resume(false); 1296 } 1297 1298 static const struct dev_pm_ops i8042_pm_ops = { 1299 .suspend = i8042_pm_suspend, 1300 .resume_noirq = i8042_pm_resume_noirq, 1301 .resume = i8042_pm_resume, 1302 .thaw = i8042_pm_thaw, 1303 .poweroff = i8042_pm_reset, 1304 .restore = i8042_pm_restore, 1305 }; 1306 1307 #endif /* CONFIG_PM */ 1308 1309 /* 1310 * We need to reset the 8042 back to original mode on system shutdown, 1311 * because otherwise BIOSes will be confused. 1312 */ 1313 1314 static void i8042_shutdown(struct platform_device *dev) 1315 { 1316 i8042_controller_reset(false); 1317 } 1318 1319 static int __init i8042_create_kbd_port(void) 1320 { 1321 struct serio *serio; 1322 struct i8042_port *port = &i8042_ports[I8042_KBD_PORT_NO]; 1323 1324 serio = kzalloc(sizeof(struct serio), GFP_KERNEL); 1325 if (!serio) 1326 return -ENOMEM; 1327 1328 serio->id.type = i8042_direct ? SERIO_8042 : SERIO_8042_XL; 1329 serio->write = i8042_dumbkbd ? NULL : i8042_kbd_write; 1330 serio->start = i8042_start; 1331 serio->stop = i8042_stop; 1332 serio->close = i8042_port_close; 1333 serio->ps2_cmd_mutex = &i8042_mutex; 1334 serio->port_data = port; 1335 serio->dev.parent = &i8042_platform_device->dev; 1336 strlcpy(serio->name, "i8042 KBD port", sizeof(serio->name)); 1337 strlcpy(serio->phys, I8042_KBD_PHYS_DESC, sizeof(serio->phys)); 1338 strlcpy(serio->firmware_id, i8042_kbd_firmware_id, 1339 sizeof(serio->firmware_id)); 1340 set_primary_fwnode(&serio->dev, i8042_kbd_fwnode); 1341 1342 port->serio = serio; 1343 port->irq = I8042_KBD_IRQ; 1344 1345 return 0; 1346 } 1347 1348 static int __init i8042_create_aux_port(int idx) 1349 { 1350 struct serio *serio; 1351 int port_no = idx < 0 ? I8042_AUX_PORT_NO : I8042_MUX_PORT_NO + idx; 1352 struct i8042_port *port = &i8042_ports[port_no]; 1353 1354 serio = kzalloc(sizeof(struct serio), GFP_KERNEL); 1355 if (!serio) 1356 return -ENOMEM; 1357 1358 serio->id.type = SERIO_8042; 1359 serio->write = i8042_aux_write; 1360 serio->start = i8042_start; 1361 serio->stop = i8042_stop; 1362 serio->ps2_cmd_mutex = &i8042_mutex; 1363 serio->port_data = port; 1364 serio->dev.parent = &i8042_platform_device->dev; 1365 if (idx < 0) { 1366 strlcpy(serio->name, "i8042 AUX port", sizeof(serio->name)); 1367 strlcpy(serio->phys, I8042_AUX_PHYS_DESC, sizeof(serio->phys)); 1368 strlcpy(serio->firmware_id, i8042_aux_firmware_id, 1369 sizeof(serio->firmware_id)); 1370 serio->close = i8042_port_close; 1371 } else { 1372 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx); 1373 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1); 1374 strlcpy(serio->firmware_id, i8042_aux_firmware_id, 1375 sizeof(serio->firmware_id)); 1376 } 1377 1378 port->serio = serio; 1379 port->mux = idx; 1380 port->irq = I8042_AUX_IRQ; 1381 1382 return 0; 1383 } 1384 1385 static void __init i8042_free_kbd_port(void) 1386 { 1387 kfree(i8042_ports[I8042_KBD_PORT_NO].serio); 1388 i8042_ports[I8042_KBD_PORT_NO].serio = NULL; 1389 } 1390 1391 static void __init i8042_free_aux_ports(void) 1392 { 1393 int i; 1394 1395 for (i = I8042_AUX_PORT_NO; i < I8042_NUM_PORTS; i++) { 1396 kfree(i8042_ports[i].serio); 1397 i8042_ports[i].serio = NULL; 1398 } 1399 } 1400 1401 static void __init i8042_register_ports(void) 1402 { 1403 int i; 1404 1405 for (i = 0; i < I8042_NUM_PORTS; i++) { 1406 struct serio *serio = i8042_ports[i].serio; 1407 1408 if (!serio) 1409 continue; 1410 1411 printk(KERN_INFO "serio: %s at %#lx,%#lx irq %d\n", 1412 serio->name, 1413 (unsigned long) I8042_DATA_REG, 1414 (unsigned long) I8042_COMMAND_REG, 1415 i8042_ports[i].irq); 1416 serio_register_port(serio); 1417 } 1418 } 1419 1420 static void i8042_unregister_ports(void) 1421 { 1422 int i; 1423 1424 for (i = 0; i < I8042_NUM_PORTS; i++) { 1425 if (i8042_ports[i].serio) { 1426 serio_unregister_port(i8042_ports[i].serio); 1427 i8042_ports[i].serio = NULL; 1428 } 1429 } 1430 } 1431 1432 static void i8042_free_irqs(void) 1433 { 1434 if (i8042_aux_irq_registered) 1435 free_irq(I8042_AUX_IRQ, i8042_platform_device); 1436 if (i8042_kbd_irq_registered) 1437 free_irq(I8042_KBD_IRQ, i8042_platform_device); 1438 1439 i8042_aux_irq_registered = i8042_kbd_irq_registered = false; 1440 } 1441 1442 static int __init i8042_setup_aux(void) 1443 { 1444 int (*aux_enable)(void); 1445 int error; 1446 int i; 1447 1448 if (i8042_check_aux()) 1449 return -ENODEV; 1450 1451 if (i8042_nomux || i8042_check_mux()) { 1452 error = i8042_create_aux_port(-1); 1453 if (error) 1454 goto err_free_ports; 1455 aux_enable = i8042_enable_aux_port; 1456 } else { 1457 for (i = 0; i < I8042_NUM_MUX_PORTS; i++) { 1458 error = i8042_create_aux_port(i); 1459 if (error) 1460 goto err_free_ports; 1461 } 1462 aux_enable = i8042_enable_mux_ports; 1463 } 1464 1465 error = request_irq(I8042_AUX_IRQ, i8042_interrupt, IRQF_SHARED, 1466 "i8042", i8042_platform_device); 1467 if (error) 1468 goto err_free_ports; 1469 1470 if (aux_enable()) 1471 goto err_free_irq; 1472 1473 i8042_aux_irq_registered = true; 1474 return 0; 1475 1476 err_free_irq: 1477 free_irq(I8042_AUX_IRQ, i8042_platform_device); 1478 err_free_ports: 1479 i8042_free_aux_ports(); 1480 return error; 1481 } 1482 1483 static int __init i8042_setup_kbd(void) 1484 { 1485 int error; 1486 1487 error = i8042_create_kbd_port(); 1488 if (error) 1489 return error; 1490 1491 error = request_irq(I8042_KBD_IRQ, i8042_interrupt, IRQF_SHARED, 1492 "i8042", i8042_platform_device); 1493 if (error) 1494 goto err_free_port; 1495 1496 error = i8042_enable_kbd_port(); 1497 if (error) 1498 goto err_free_irq; 1499 1500 i8042_kbd_irq_registered = true; 1501 return 0; 1502 1503 err_free_irq: 1504 free_irq(I8042_KBD_IRQ, i8042_platform_device); 1505 err_free_port: 1506 i8042_free_kbd_port(); 1507 return error; 1508 } 1509 1510 static int i8042_kbd_bind_notifier(struct notifier_block *nb, 1511 unsigned long action, void *data) 1512 { 1513 struct device *dev = data; 1514 struct serio *serio = to_serio_port(dev); 1515 struct i8042_port *port = serio->port_data; 1516 1517 if (serio != i8042_ports[I8042_KBD_PORT_NO].serio) 1518 return 0; 1519 1520 switch (action) { 1521 case BUS_NOTIFY_BOUND_DRIVER: 1522 port->driver_bound = true; 1523 break; 1524 1525 case BUS_NOTIFY_UNBIND_DRIVER: 1526 port->driver_bound = false; 1527 break; 1528 } 1529 1530 return 0; 1531 } 1532 1533 static int __init i8042_probe(struct platform_device *dev) 1534 { 1535 int error; 1536 1537 i8042_platform_device = dev; 1538 1539 if (i8042_reset == I8042_RESET_ALWAYS) { 1540 error = i8042_controller_selftest(); 1541 if (error) 1542 return error; 1543 } 1544 1545 error = i8042_controller_init(); 1546 if (error) 1547 return error; 1548 1549 #ifdef CONFIG_X86 1550 if (i8042_dritek) 1551 i8042_dritek_enable(); 1552 #endif 1553 1554 if (!i8042_noaux) { 1555 error = i8042_setup_aux(); 1556 if (error && error != -ENODEV && error != -EBUSY) 1557 goto out_fail; 1558 } 1559 1560 if (!i8042_nokbd) { 1561 error = i8042_setup_kbd(); 1562 if (error) 1563 goto out_fail; 1564 } 1565 /* 1566 * Ok, everything is ready, let's register all serio ports 1567 */ 1568 i8042_register_ports(); 1569 1570 return 0; 1571 1572 out_fail: 1573 i8042_free_aux_ports(); /* in case KBD failed but AUX not */ 1574 i8042_free_irqs(); 1575 i8042_controller_reset(false); 1576 i8042_platform_device = NULL; 1577 1578 return error; 1579 } 1580 1581 static int i8042_remove(struct platform_device *dev) 1582 { 1583 i8042_unregister_ports(); 1584 i8042_free_irqs(); 1585 i8042_controller_reset(false); 1586 i8042_platform_device = NULL; 1587 1588 return 0; 1589 } 1590 1591 static struct platform_driver i8042_driver = { 1592 .driver = { 1593 .name = "i8042", 1594 #ifdef CONFIG_PM 1595 .pm = &i8042_pm_ops, 1596 #endif 1597 }, 1598 .remove = i8042_remove, 1599 .shutdown = i8042_shutdown, 1600 }; 1601 1602 static struct notifier_block i8042_kbd_bind_notifier_block = { 1603 .notifier_call = i8042_kbd_bind_notifier, 1604 }; 1605 1606 static int __init i8042_init(void) 1607 { 1608 struct platform_device *pdev; 1609 int err; 1610 1611 dbg_init(); 1612 1613 err = i8042_platform_init(); 1614 if (err) 1615 return err; 1616 1617 err = i8042_controller_check(); 1618 if (err) 1619 goto err_platform_exit; 1620 1621 pdev = platform_create_bundle(&i8042_driver, i8042_probe, NULL, 0, NULL, 0); 1622 if (IS_ERR(pdev)) { 1623 err = PTR_ERR(pdev); 1624 goto err_platform_exit; 1625 } 1626 1627 bus_register_notifier(&serio_bus, &i8042_kbd_bind_notifier_block); 1628 panic_blink = i8042_panic_blink; 1629 1630 return 0; 1631 1632 err_platform_exit: 1633 i8042_platform_exit(); 1634 return err; 1635 } 1636 1637 static void __exit i8042_exit(void) 1638 { 1639 platform_device_unregister(i8042_platform_device); 1640 platform_driver_unregister(&i8042_driver); 1641 i8042_platform_exit(); 1642 1643 bus_unregister_notifier(&serio_bus, &i8042_kbd_bind_notifier_block); 1644 panic_blink = NULL; 1645 } 1646 1647 module_init(i8042_init); 1648 module_exit(i8042_exit); 1649